注册 登录
编程论坛 C++教室

求助!!关于定义类的

raul665 发布于 2011-09-22 10:33, 553 次点击
我用Win32 Console Application建立一个工程,在工程中插入一个Person类,头文件如下,里面有些自动生成的代码,看不太懂

#if !defined(AFX_PERSON_H__EE99EDA9_34DC_42F9_BD9C_5296953A98B7__INCLUDED_)
#define AFX_PERSON_H__EE99EDA9_34DC_42F9_BD9C_5296953A98B7__INCLUDED_
#include <string>//这一句是我加的
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class Person  
{
public:
    Person(string nam, char s, int a);
    virtual ~Person();
protected:
    string name;
    char sex;
    int age;
};
#endif // !defined(AFX_PERSON_H__EE99EDA9_34DC_42F9_BD9C_5296953A98B7__INCLUDED_)
源文件如下:

#include "stdafx.h"
#include "Person.h"
#include <string>
Person::Person(string nam, char s, int a)
{
    name=nam;sex=s;age=a;

}
Person::~Person()
{

}
编译时出现如下错误:
unexpected 'class Person ('
unexpected token(s) preceding ';'等
我知道问题在哪,但是不知道怎么改,
就是string的问题,在Person.h文件中包含了<string>为什么还会出错,是编译系统的问题吗,如果我把Person类中的string类型的成员
改成int,float,char*等简单类型的就没有错了,请问这个string到底哪错了?
谢谢各位~~
5 回复
#2
hellovfp2011-09-22 12:45
你在头文件类person前面加一句:
using namespace std; 就行了。

学习C++,你需要了解的第一点就是,所有的STL类,包括string,vector, list,stack这些都是类,它们都包含在命名空间std中,如果不申明命名空间,它就不被外部程序所使用,所以如果你不加using namespace std;这句,就需要在每个用类的地方,加上std::,如你的构造函数:
Person(std::string nam, char s, int a);

int,float,char*这些是类部数据类型,无需命名空间申明。
#3
peach54602011-09-22 12:47
尽量不要using namespace std
采用std::

我的理解...
#4
hellovfp2011-09-22 12:48
另外, name=nam;sex=s;age=a;不要这么链着写,分成三行,免得如果你名字拼错了,你还得仔细查看这行哪里出错。
#5
hellovfp2011-09-22 12:51
回复 3楼 peach5460
我也是,个人习惯std::写法。
#6
raul6652011-09-23 14:46
回复 2楼 hellovfp
谢谢啊,果然是这样的呃
1