你的代码,我在VS2010下,以下几个地方的改动后,编译通过。
1 包含的头文件改为
#include <iostream>
#include <string>
2构造器
String::String(int s)
{
str=s;
}
改为
String(const string& s);
String::String(const string& s):str(s)
{
}
3 增加默认构造器
String(void):str("")
{
}
我不知道VC6下为何报出不能访问私有成员的错误而到了VS2010下就没有报了,手上也没有VC6,所以也无从研究。猜想可能是头文件的差别吧。
至于预编译,打开工程属性中的使用预编译头的属性,一般在VS生成项目时,都会自动生成文件stdafx.h stdafx.cpp,它们就是预编译头,你将工程中其它地方的#include全都放到这里,其它地方的就全部去掉,然后在所有CPP文件中增加#include "stdafx.h",每当增加头文件时,都只是加入到stdafx.h中。而stdafx.h中的包含顺序也是需要认真考虑的,合理的程序代码和结构才能做到这一点(所有包含全在头文件中)。
1 包含的头文件改为
#include <iostream>
#include <string>
2构造器
String::String(int s)
{
str=s;
}
改为
String(const string& s);
String::String(const string& s):str(s)
{
}
3 增加默认构造器
String(void):str("")
{
}
我不知道VC6下为何报出不能访问私有成员的错误而到了VS2010下就没有报了,手上也没有VC6,所以也无从研究。猜想可能是头文件的差别吧。
至于预编译,打开工程属性中的使用预编译头的属性,一般在VS生成项目时,都会自动生成文件stdafx.h stdafx.cpp,它们就是预编译头,你将工程中其它地方的#include全都放到这里,其它地方的就全部去掉,然后在所有CPP文件中增加#include "stdafx.h",每当增加头文件时,都只是加入到stdafx.h中。而stdafx.h中的包含顺序也是需要认真考虑的,合理的程序代码和结构才能做到这一点(所有包含全在头文件中)。