技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 程序开发 > c/c++ > 正文

关于c++ primer plus 第14章代码重用课后编程练习第一题的问题

来源: 技术CTO 阅读:

小弟求教一个问题。是c++ primer plus(第6版)上的一个问题,也就是第十四章代码重用那张,不是有道课后编程练习题吗?是关于写Wine类的,也就是编程练习第一题。我自己尝试写了下。但是有点问题我也不知道为什么。我自己写的里面我注释掉了一小部分,原因有两个,一个是不知道怎么解决,二是因为不是那道题想要核心考察的部分,所以我就暂时忽略下。现在我想解决剩下的问题。有三个报错。下面是我写的代码,首先是一个头文件。然后是一个实现文件,最后是一个使用这个类的源文件。希望各位大侠帮忙下咯,大家把这个粘贴下在编译器里面,帮忙看哈嘛。我用的是vc++6.0,谢谢各位了。
============================================   wine.h如下:

#ifndef WINE_H_
#define WINE_H_
#include <string.h>
#include <valarray>
#include <iostream.h>

typedef std::valarray<int> ArrayInt;
class Pair
{
private:

ArrayInt s1;
ArrayInt s2;
int n;
public:
Pair(int c,int a=0,int b=0):s1(a,c),s2(b,c) {n=c};
    Pair(int c,int *a,int *b);
void get()
{
for(int i=0;i<n;i++)
{   
cout<<"Enter year: ";
cin>>s1[i];
cout<< cout<<"Enter bottles for that year: ";
cin>>s2[i];
}
};
void show()
{
for(int i=0;i<n;i++)
cout<<"             "<<s1[i]<<"           "<<s2[i]<<endl;
};
int assist();

};

typedef pair P;                                         
class Wine  
{
private:


 //   string name;
int kind;
    P information;
public:
Wine(/*const char * l="null",*/int y=0);
Wine(/*const char * l,*/int y,const int *yr,const int *bot);

void GetBottles();
void Show();
// string & Label();
int sum();
};
#endif
    
==============================wine.cpp 如下

#include "wine.h"
#include <iostream.h>

Wine::Wine(/*const char * l,*/int y):/*name(l),*/information(y)
{
kind=y;
}
void Wine::GetBottles()
{
cout<<"Enter "/*<<name<<*/" data for "<<kind<<" year(s):"<<endl;
    information.get();
}
void Wine::Show()
{
cout<<"Wine: "/*<<name*/<<endl;
cout<<"            year          Bottles"<<endl;
    information.show();
}
Wine::Wine(/*const char *l,*/int y,const int *yr,const int *bot):/*name(l),*/information(y,yr,bot)  
{
    kind=y;
}

Pair::Pair(int c,int *a,int *b):s1(c),s2(c)
{
n=c;
for(int i=0;i<c;i++)
{
s1[i]=(*a)[i];
s2[i]=(*b)[i];
}
}
/*string & Wine::Label()
{
return name;
}*/


int Pair::assist()
{
int m=0;
for(int i=0;i<n;i++)
{
m+=s2[i];
}
return m;
}
int Wine::sum()
{
   return information.assist();
}

===========================================main.cpp如下:

#include "wine.h"
#include <iostream.h>

int main(void)
{
cout<<"Enter name of wine: ";
char  lab[50];
cin.getline(lab,50);
cout<<"Enter number of years: ";
int yrs;
cin>>yrs;

Wine holding(/*lab,*/yrs);
holding.GetBottles();
holding.Show();

const int YRS=3;
    
int y[YRS]={1993,1995,1998};
int b[YRS]={48,60,72};

Wine more(/*"Gushing Grape Red",*/YRS,y,b);
more.Show();
cout<<"Total bottles for "/*<<more.Label()
*/<<": "<<more.sum()<<endl;
cout<<"Bye\n";
return 0;
}


 



别用VC6, 至少升级到VS2005或以后 版本。
VC6的C++是不符合标准的,即使程序正确,在别的编译器下都可以正确编译运行,在VC6下页可能报错。
反过来,你在VC6下改得能编译运行,放到别的编译器下很可能报错。
引用 楼主 u013267754 的回复:
我用的是vc++6.0,谢谢各位了。

还在用上个世纪的技术呢?赶紧升级吧!否则别人想帮你都爱莫能助,这年头谁手里还老备个 VC 6 啊。
引用 1 楼 truelance 的回复:
别用VC6, 至少升级到VS2005或以后 版本。
VC6的C++是不符合标准的,即使程序正确,在别的编译器下都可以正确编译运行,在VC6下页可能报错。
反过来,你在VC6下改得能编译运行,放到别的编译器下很可能报错。

其实我一直用的是VS2012,可是之前我遇到过一个问题,是关于strcpy()函数的,我只要一写std::strcpy(),就报错说不安全,叫我考虑用strcpy_s()来代替,可是用了还是有错误。所以只要遇到包含这个函数的,我也就只有用vc++来代替了。
引用 2 楼 ri_aje 的回复:
Quote: 引用 楼主 u013267754 的回复:

我用的是vc++6.0,谢谢各位了。

还在用上个世纪的技术呢?赶紧升级吧!否则别人想帮你都爱莫能助,这年头谁手里还老备个 VC 6 啊。


顺便问下,现在什么平台流行噢?
引用 3 楼 u013267754 的回复:
Quote: 引用 1 楼 truelance 的回复:

别用VC6, 至少升级到VS2005或以后 版本。
VC6的C++是不符合标准的,即使程序正确,在别的编译器下都可以正确编译运行,在VC6下页可能报错。
反过来,你在VC6下改得能编译运行,放到别的编译器下很可能报错。

其实我一直用的是VS2012,可是之前我遇到过一个问题,是关于strcpy()函数的,我只要一写std::strcpy(),就报错说不安全,叫我考虑用strcpy_s()来代替,可是用了还是有错误。所以只要遇到包含这个函数的,我也就只有用vc++来代替了。


它只是warning, 不是error,不影响使用。而且你可以按照它提示的方法修改编译宏就可以消除这个warning了。
引用 4 楼 u013267754 的回复:
Quote: 引用 2 楼 ri_aje 的回复:

Quote: 引用 楼主 u013267754 的回复:

我用的是vc++6.0,谢谢各位了。

还在用上个世纪的技术呢?赶紧升级吧!否则别人想帮你都爱莫能助,这年头谁手里还老备个 VC 6 啊。


顺便问下,现在什么平台流行噢?

我也不清出,不过 vc 6 肯定是过时了。
我一般都用 g++ (>=4.8) 或 clang++ (>=3.4.1)。vc 的话现在用 2013,不过也是各种不给力,基本也就专门重复 vc 错误的时候用一下。vc 6 的问题在于,第一它本来对标准支持不好,第二它原来对应的那套标准 (c++98 or c++03) 已经作废了,现行的是 c++11 (or c++14),对 c++ 做了重大修改和扩充,你学新版 c++ (c++ primer plus 6 是也),却用个老掉牙的编译器,属于欲善工事,其器却很烂的情况。

vs 2012 还算比较新,至于它说 strcpy 不安全的问题,别搭理它就行了,windows 补丁比谁都多,不也照样跑吗。vs 就这德行,正事儿(充分支持标准 c++ )还没干利落呢,竟整些花里胡哨的装b.

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^