Ошибка при использовании структуры, определенной в другом файле в UnitTesting (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
...

0

Решение

Parser.h не определяет структуру, она ее объявляет Поэтому, когда вы пытаетесь использовать его в качестве параметра шаблона для stackи вы не можете использовать неполные типы в качестве параметров для контейнеров STL:

C ++ 11, проект 3035, 17.4.3.6, пункт 2:

В частности, эффекты не определены в следующих случаях:

если неполный тип (3.9) используется в качестве аргумента шаблона при создании экземпляра компонента шаблона,
если специально не разрешено для этого компонента.

Ты можешь проверить этот вне для рассуждений.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]