2012-07-30 60 views
1

我是C++的新手。我正在尝试在C++中创建头文件以将类放入其中,并将其包含在主fn中。当我在.h文件中声明只有函数(不是类成员fns。)并且它们在具有相同名称的.cpp文件中定义时,一切正常。但是当在头文件中定义类时,编译项目时会出现一些错误!请帮我解决这个问题,因为我没有在网上找到任何有用的东西(谷歌)。头文件中的类 - 无法编译?

这里是我的代码:

// STUDENT.h 
#ifndef STUDENT 
#define STUDENT 

class STUDENT 
{ 
private : 
int marks; 
public : 
void setMarks(int); 
void getMarks(); 
}; 

#endif 

//STUDENT.cpp

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

void STUDENT :: setMarks(int x) 
{ 
marks = x; 
} 

void STUDENT :: getMarks() 
{ 
cout << marks; 
} 

// main.cpp中

#include <cstdlib> 
#include <iostream> 
#include "STUDENT.h" 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
system("PAUSE"); 
return EXIT_SUCCESS; 
} 

其他细节 错误显示在开发的C++:

(3)包含在main.cpp中 (5)匿名联盟不能有fn。成员 (11)抽象声明器''用作声明 (11)名称空间范围匿名聚合必须是静态的

P.S我仍然没有在main中使用类的对象。只是想测试一下B4编写实际的程式

+0

嗯,'类STUDENT' ......这应该被标记为功课,对吧? – 2012-07-30 10:10:01

+0

为什么不把'using namespace std;'放在student.cpp中? – 2012-07-30 10:10:36

+0

我知道我的实际项目是差异。我做了这个只是为了张贴在网上....它像一个小班但类似于我的项目中的一个...是的,我没有在所有文件中使用命名空间,并试图它没有工作......终于改变了宏标识符 – 2012-07-30 10:21:44

回答

1

你的问题是这两行:

#define STUDENT 

class STUDENT 

第一个告诉预处理器定义一个名为STUDENT,并与一个空的身体。当预处理器看到任何提及的STUDENT替换与身体,在这种情况下什么都没有(因为宏体是空的)。

要解决此问题,请更改#define或更改类名称。

+1

或者,更好然而,为他们两个选择明智的名字,比如'__STUDENT__'作为包括后卫和学生。 – 2012-07-30 10:12:30

+0

@DavidSchwartz尽管使用双引号下划线可能不是一个好主意,因为标准(我认为C和C++)为编译器保留了这些名称。 – 2012-07-30 10:17:00

+0

非常感谢你:)它工作!但我现在有一个较小的问题:(!当我编译它说'标记'是未声明的get文件fn .. STUDENT.cpp文件...为什么?不能像一个类的成员fns。 pdt类的数据? – 2012-07-30 10:18:21

7

的预处理器会看到这样的:

#define STUDENT 

class STUDENT 
{ 
    … 
}; 

编译器(预处理后)看到这一点:

class 
{ 
    … 
}; 
+1

哦驼峰... – Paranaix 2012-07-30 10:10:33

+2

那些一定是我有史以来最快的四个投票。 – 2012-07-30 10:11:27

+0

那么我应该怎么做才能成功地编译我的程序? – 2012-07-30 10:14:35

1

重新命名的标题警卫如下,你应该确定