2012-07-30 96 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

重新命名的標題警衛如下,你應該確定