2012-11-05 30 views
0

我有一個Parser.h,定義一個結構StmtParent錯誤使用單元測試(CppUnit的),在另一個文件中定義的結構

... 
struct StmtParent; 

class Parser { 
... 

然後在Parser.cpp

struct StmtParent { 
    int stmtNo; 
    int parent; 
}; 
... 

似乎沒事吧?然後,我有一個單元測試(CppUnit的):

# in ParserUnitTests.h 
#include "header\Parser.h" 

# in ParserUnitTests.cpp 
void ParserUnitTests::testParseProcSideEffects() { 
... 
stack<StmtParent> follows; 
    ... 

然後我得到這樣的錯誤:

error C2027: use of undefined type 'StmtParent' 

爲什麼,我可以使用功能,如Parser::parseLine()。爲什麼我不能訪問結構?所以我嘗試了Parser.hParserUnitTests.cpp(儘管我已經將它包含在標題中)。然後我得到:

Error 8 error C2146: syntax error : missing ';' before identifier 'm_cCurToken' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\parser.h 52 
Error 9 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\microsoft sdks\windows\v7.0a\include\parser.h 52 
Error 10 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\microsoft sdks\windows\v7.0a\include\parser.h 52 
... 

回答

2

Parser.h沒有定義結構,它正向聲明它。因此它是不完整的,當您嘗試使用它作爲stack一個模板參數,你不能使用不完全類型作爲參數STL容器:

C++ 11草案3035,17.4.3.6條第2款:

特別地,該效果未定義在下列情況下:

...

如果一個不完整的類型(3.9)實例化一個模板組件時被用作模板參數, ,除非特別允許該組件。

您可以檢查出this推理。

+0

發現我需要在頭文件中定義結構 –

相關問題