本文介绍了C ++未声明的标识符(但已声明?)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很确定我已经包含了qanda类,但是当我尝试声明一个包含它的向量或该类型的类时,我收到一条错误消息,指出qanda是未定义的.知道可能是什么问题吗?

I'm pretty sure I've included the qanda class, but when I try to declare a vector that contains it or a class of that type I get an error saying that qanda is undefined. Any idea what the problem might be?

bot_manager_item.h

bot_manager_item.h

#pragma once

#include "../bot_packet/bot_packet.h"
#include <vector>

class bot_manager_item;
#include "qanda.h"
#include "bot_manager.h"

class bot_manager_item
{
public:
    bot_manager_item(bot_manager* mngr, const char* name, const char* work_dir);
    ~bot_manager_item();

    bool startup();
    void cleanup();
    void on_push_event(bot_exchange_format f);
    bool disable;

private:
    void apply_changes();
    bot_manager *_mngr;

    std::string _name;
    std::string _work_dir;
    std::string _message;
    std::string _message_copy;
    std::vector<qanda> games;
    qanda test;

    char _config_full_path[2600];
};

qanda.h

#ifndef Q_AND_A
#define Q_AND_A

#include "users.h"
#include "..\bot_packet\bot_packet.h"
#include "bot_manager.h"
#include <string>
#include <algorithm>
#include <map>
#include <vector>
#include <fstream>


class qanda
{
public:
    qanda(bot_manager * manager, std::string name, std::string directory);
    ~qanda(){};
    void room_message(std::string username, std::string user_message);
    void timer_tick();

private:
    // data members
    std::string question;
    std::string answer;
    std::string directory;
    std::string command_prefix;
    std::string name;

    Users users;
    std::map <std::string, std::string> questions_and_answers;

    int time_per_question; // seconds
    int time_between_questions; // seconds
    int timer; // milliseconds

    bool is_delayed;
    bool is_playing;

    bot_manager * manager;

    // functions
    void new_question();
    void send_message(std::string msg);
    void announce_question();
    void load_questions();

};

#endif

已解决:我最终以避免在qanda类中使用bot_manager的方式重构代码.

Solved: I ended up refactoring the code in such a way as to avoid the use of bot_manager within the qanda class.

推荐答案

我怀疑是循环#include问题. qanda.h是否可能间接包含bot_manager_item.h?

I suspect a circular #include problem. Is it possible qanda.h indirectly includes bot_manager_item.h?

您似乎可以通过使用前向声明来减少标头依赖性

It looks like you may be able to reduce header dependencies by using a forward declaration

class bot_manager;

而不是您发布的一个或两个头文件中的#include "bot_manager.h".

instead of #include "bot_manager.h" in one or both of your posted header files.

这篇关于C ++未声明的标识符(但已声明?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 19:23