在UnitTesting中使用另一个文件中定义的struct时出错(cppunit)

时间:2012-11-05 01:43:47

标签: c++ visual-c++ cppunit

我有一个Parser.h,它定义了一个结构StmtParent

...
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.h中加入ParserUnitTests.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
...

1 个答案:

答案 0 :(得分:2)

Parser.h没有定义结构,它向前声明它。因此,当您尝试将其用作stack的模板参数时,它是不完整的,并且您不能将不完整的类型用作STL容器的参数:

  

C ++ 11 draft 3035,17.4.3.6,第2段:

     

特别是,在以下情况下效果未定义:

     

...

     
    

如果在实例化模板组件时将不完整类型(3.9)用作模板参数,     除非特别允许该组件。

  

您可以查看this了解原因。