2012-11-02 111 views
0

錯誤:Cell.h的第12行:'Actor'未聲明的標識符。指向對象指針的未聲明標識符向量

如果我嘗試在它上面轉發聲明,它說有一個重新定義。我該怎麼辦?

Actor.h:

#ifndef ACTOR_H 
#define ACTOR_H 
#include <iostream> 
#include <vector> 
#include <string> 
#include "Cell.h" 
using namespace std; 

class Actor //Simple class as a test dummy. 
{ 
    public: 
     Actor(); 
     ~Actor(); 

}; 
#endif 

Cell.h:

#include <iostream> 
#include <string> 
#include <vector> 
#include "Actor.h" 
#ifndef CELL_H 
#define CELL_H 
using namespace std; 

class Cell // Object to hold Actors. 
{ 
    private: 
    vector <Actor*> test; 
public: 
    Cell(); 
    ~Cell(); 
    vector <Actor*> getTest(); 
    void setTest(Actor*); 
}; 

#endif 

Cell.cpp:

#include "Cell.h" 
#include <vector> 

vector<Actor*> Cell::getTest() //These functions also at one point stated that 
{        // they were incompatible with the prototype, even 
}        // when they matched perfectly. 
void Cell::setTest(Actor*) 
{ 
} 

我還能做什麼?

回答

0

您通過cell.hactor.h之間相互的引用中有遞歸#include秒。

Cell.h,刪除#include <Actor.h>

Cell.h中,在class Cell的定義的上方添加行class Actor;

Cell.cpp,你可能需要添加#include "Actor.h"

+0

進行編輯,得到與上面評論中所述相同的錯誤。 – valkn0t

+0

@Twshal這是一個不同的問題。這個和我的答案解決了最初的問題。如果我的評論沒有幫助,請提出一個新問題。 [so]已經存在,但你必須自己找到它們。我已經給你看過了。 –

+0

非常感謝您的幫助,Luchian!然而這是Robs的回答,我拿走了它已經修復它。你們都有類似的答案,他只是給了更多正確的東西,並提供了一個原因,爲什麼它不起作用。 – valkn0t

2

取下Actor.h#include "Cell.h",你就可以走了。

一般而言,您可以選擇前向聲明,並且包括您必須的位置。我還會用Cell.h替換#include "Actor.h",並提供前向聲明:class Actor;

cpp文件,您可以包括報頭,如果你需要他們。

+0

中途工作。現在我被鏈接器錯誤抨擊:> LINK:致命錯誤LNK1123:在轉換爲COFF期間失敗:文件無效或損壞 – valkn0t

+0

快速搜索導致我編輯啓用增量鏈接到否,讓我這個錯誤。 ** Cell.obj:警告LNK4075:由於'/ INCREMENTAL:NO'規範忽略'/ EDITANDCONTINUE' 1> MSVCRTD.lib(crtexe.obj):錯誤LNK2019:無法解析的外部符號_main在函數中引用___tmainCRTStartup 1> C :\ Users \ Student \ Desktop \ DOCO Simulation_3 \ DOCO Simulation \ Debug \ Test.exe:致命錯誤LNK1120:1個未解析的外部代碼** – valkn0t

+0

@Twshal這是一個不同的問題,並與您用於編譯的子系統有關。谷歌對於那個確切的錯誤消息,你一定會發現一些有用的東西。 –