-2

抱歉提前开始另一个循环依赖线程,但我几乎尝试了所有方法,也许一双新的眼睛可以提供帮助。我如何得到这个 * 编译?

卡片

#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:

数据库.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);
4

1 回答 1

0

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

卡片.h

#ifndef CARD_H
#define CARD_H

#include "Database.h"

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

#endif // #ifndef CARD_H

数据库.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

卡片.cpp

#include "Card.h"

Card card;

数据库.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
于 2013-09-19T07:19:12.257 回答