循环依赖项期望在'{'标记之前的类名

时间:2013-09-19 06:57:36

标签: c++ circular-dependency

抱歉提前启动另一个循环依赖线程,但我尝试了几乎所有东西,也许一双新眼睛可以提供帮助。 我怎么得到这个*编译?

CARD.H

#ifndef CARD_H
#define CARD_H

#include <string>
#include <sstream>
#include <irrKlang.h>
#include "Database.h"

using namespace std;
using namespace irrklang;

class Card: public Database{  // problem expected class-name before '{' token
 public:

DATABASE.H

#ifndef __DATABASE_H__
#define __DATABASE_H__

#include <string>
#include <vector>
#include <sqlite3.h>
#include <wx/string.h>
#include <irrKlang.h>
#include <wx/file.h>

#include "Card.h"   // even though i include card.h

using namespace std;
using namespace irrklang;

class Card;  // if i take this out, I get: 'Card' was not declared in this scope|

class Database
{
public:
vector<Card> queryC(wstring query);

1 个答案:

答案 0 :(得分:0)

有助于防止循环依赖的两条规则: 1.)如果您不需要实现类,只能通过前向引用声明它。 2.)如果您需要实现,请尽可能晚地包含头文件。

Card.h

#ifndef CARD_H
#define CARD_H

#include "Database.h"

class Card : public Database {
    public:
            int card;
};

#endif // #ifndef CARD_H

Database.h

#ifndef DATABASE_H
#define DATABASE_H

#include <vector>
#include <string>

class Card;

class Database {
    public:
            std::vector<Card> queryC(std::string query);
};

#endif // #ifndef DATABASE_H

Card.cpp

#include "Card.h"

Card card;

Database.cpp

#include "Database.h"

Database database;

$ g++ -c Card.cpp -o Card.o
$ g++ -c Database.cpp -o Database.o
$ ls -l Card.o Database.o
-rw-r--r-- 1 user group 959 19. Sep 09:13 Card.o
-rw-r--r-- 1 user group 967 19. Sep 09:13 Database.o