好吧,所以我是一個HTML/Javascript/PHP專業人士,但我正在嘗試學習C++。我仍然是一個新手,我有一個C++編程項目,我有錯誤。C++試圖使用#ifndef和#include語句
包含int main()的文件是'football.cpp',並且我必須使用三個類的.h和.cpp文件:Game,Team和Date。團隊的每個實例都包含一個遊戲矢量,每個遊戲都包含一個日期。日期不包含任何其他類的實例。
我想找到一種方法在文件頂部使用#include和#ifndef語句,以便在編譯時不會出錯,但是我沒有找到可用的組合。我不確定是否還有其他錯誤。這是我目前的#include節,還不算其他庫:
football.cpp
#include "game.h"
#include "team.h"
#include "date.h"
team.h
#ifndef __game_h_
#define __game_h_
#endif
team.cpp
#include "team.h"
#ifndef __game_h_
#define __game_h_
#endif
game.h
#ifndef __date_h_
#define __date_h_
#endif
game.cpp
#include "game.h"
#ifndef __date_h_
#define __date_h_
#endif
date.cpp
#include "date.h"
我使用Cygwin克++編譯器,我用編譯它的行是:
g++ football.cpp team.cpp game.cpp date.cpp -o football.exe
這裏是所有我得到的錯誤:(警告,牆壁文字)
$ g++ football.cpp team.cpp game.cpp date.cpp -o football.exe
In file included from football.cpp:9:0:
game.h:15:96: error: ‘Date’ has not been declared
game.h:24:1: error: ‘Date’ does not name a type
game.h:37:1: error: ‘Date’ does not name a type
football.cpp: In function ‘int main(int, char*)’:
football.cpp:65:70: error: no matching function for call to ‘Game::Game(std::string&, std::string&, int [5], int [5], Date&)’
game.h:15:1: note: candidates are: Game::Game(std::string, std::string, const int, const int*, int)
game.h:14:1: note: Game::Game()
game.h:10:12: note: Game::Game(const Game&)
In file included from team.cpp:4:0:
team.h:24:8: error: ‘Game’ was not declared in this scope
team.h:24:12: error: template argument 1 is invalid
team.h:24:12: error: template argument 2 is invalid
team.cpp: In member function ‘float Team::getStat3()’:
team.cpp:36:26: error: request for member ‘size’ in ‘((Team*)this)->Team::games’, which is of non-class type ‘int’
team.cpp:37:21: error: invalid types ‘int[int]’ for array subscript
team.cpp:37:50: error: invalid types ‘int[int]’ for array subscript
team.cpp:38:21: error: invalid types ‘int[int]’ for array subscript
team.cpp:38:47: error: invalid types ‘int[int]’ for array subscript
team.cpp:38:76: error: invalid types ‘int[int]’ for array subscript
team.cpp:38:106: error: invalid types ‘int[int]’ for array subscript
team.cpp: In function ‘bool compare2(Team, Team)’:
team.cpp:45:39: error: request for member ‘size’ in ‘t1.Team::games’, which is of non-class type ‘const int’
team.cpp:46:39: error: request for member ‘size’ in ‘t2.Team::games’, which is of non-class type ‘const int’
team.cpp:50:17: error: request for member ‘size’ in ‘t1.Team::games’, which is of non-class type ‘const int’
team.cpp:50:35: error: request for member ‘size’ in ‘t2.Team::games’, which is of non-class type ‘const int’
team.cpp:52:24: error: request for member ‘size’ in ‘t1.Team::games’, which is of non-class type ‘const int’
team.cpp:52:43: error: request for member ‘size’ in ‘t2.Team::games’, which is of non-class type ‘const int’
team.cpp: In function ‘bool compare3(Team, Team)’:
team.cpp:62:29: error: passing ‘const Team’ as ‘this’ argument of ‘float Team::getStat3()’ discards qualifiers
team.cpp:63:29: error: passing ‘const Team’ as ‘this’ argument of ‘float Team::getStat3()’ discards qualifiers
In file included from game.cpp:5:0:
game.h:15:96: error: ‘Date’ has not been declared
game.h:24:1: error: ‘Date’ does not name a type
game.h:37:1: error: ‘Date’ does not name a type
game.cpp: In constructor ‘Game::Game()’:
game.cpp:26:3: error: ‘date’ was not declared in this scope
game.cpp:26:15: error: ‘Date’ was not declared in this scope
game.cpp: At global scope:
game.cpp:29:94: error: ‘Date’ has not been declared
game.cpp:29:1: error: prototype for ‘Game::Game(std::string, std::string, int*, int*, int)’ does not match any in class ‘Game’
game.h:10:12: error: candidates are: Game::Game(const Game&)
game.h:15:1: error: Game::Game(std::string, std::string, const int*, const int*, int)
game.cpp:13:1: error: Game::Game()
game.cpp: In member function ‘int Game::getVisitingScore(int) const’:
game.cpp:80:10: error: ‘visitingScores’ was not declared in this scope
game.cpp: At global scope:
game.cpp:94:1: error: ‘Date’ does not name a type
如果需要進一步澄清,我會編輯,但我認爲不會。
任何幫助將被廣泛讚賞。
只要你知道,雙下劃線在任何範圍內保留,並用下劃線開始在全球範圍內保留(而把一個大寫字母之後,在任何範圍內保留第一個下劃線)。 – chris
請勿使用以(或包含)兩個下劃線開頭的名稱(或以一個下劃線後跟大寫字母開頭的名稱)。他們留給執行。但這與問題無關。 –
@PeteBecker,它花了我100次的時間來閱讀注意到的答案,但是雙重下劃線不一定要在開始時違反規則。 – chris