У меня проблемы с созданием объектной модели, включающей вложенные классы, с использованием MinGW C ++. Вот пример, который разоблачает мою проблему:
foo.h:
/*
* foo.h
*
* Created on: Sep 25, 2011
* Author: AutoBot
*/
#ifndef FOO_H_
#define FOO_H_
class Foo
{
public:
class Bar;
Bar bar;
} extern foo;
#endif /* FOO_H_ */
bar.h:
/*
* bar.h
*
* Created on: Sep 25, 2011
* Author: AutoBot
*/
#ifndef BAR_H_
#define BAR_H_
#include <iostream>
using namespace std;
#include "foo.h"
class Foo::Bar
{
public:
void Test() {cout <<"Test!";}
};
#endif /* BAR_H_ */
main.cpp:
/*
* main.cpp
*
* Created on: Sep 25, 2011
* Author: AutoBot
*/
#include "foo.h"
Foo foo;
int main (int argc, char *argv[])
{
foo.bar.Test();
return 0;
}
Журнал сборки Eclipse CDT:
**** Build of configuration Debug for project NestedClassTest ****
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o src\main.o ..\src\main.cpp
In file included from ..\src\main.cpp:10:0:
..\src\/foo.h:15:6: error: field 'bar' has incomplete type
..\src\main.cpp: In function 'int main(int, char**)':
..\src\main.cpp:16:6: error: 'class Foo' has no member named 'bar'
Build error occurred, build is stopped
Time consumed: 171 ms.
Так что, по сути, он не может распознать определение бара, которое я сделал в bar.h. Это нормально? Почему я не могу определить вложенные классы таким образом? Это просто ограничение набора инструментов MinGW? Любая помощь / совет приветствуется.
Примечание: в моей настоящей программе я намерен, чтобы "foo" из нее теоретически служил одноэлементным классом. Он будет представлять приложение в целом, и его подсистемы (или «бары») будут определены и созданы один раз внутри класса. Я делаю это, чтобы попытаться сделать код более управляемым. Если кто-то имеет в виду более выполнимый шаблон дизайна, пожалуйста, скажите мне!