gpt4 book ai didi

c++ - 将类添加到 vector 不起作用

转载 作者:行者123 更新时间:2023-11-30 05:03:47 25 4
gpt4 key购买 nike

我有以下问题:

我有两个类:

FooClass.h

#include <vector>
#include "BaseClass.h"

using namespace std;
class FooClass
{
public:
vector<BaseClass> vBaseClass;

void doStuff();
void addBaseClass(BaseClass &baseClass);
};

FooClass.cpp

    #include <iostream>
#include "FooClass.h"



void FooClass::doStuff()
{
cout << "Well nice done" << endl;
}

void FooClass::addBaseClass(BaseClass &baseClass)
{
baseClass.updateData(this);
vBaseClass.push_back(baseClass);
}

基类.h

#include "FooClass.h"

class BaseClass {
public:
void updateData(FooClass *pFooClass);

};

基础类.cpp

#include "BaseClass.h"


void BaseClass::updateData(FooClass *pFooClass)
{
//We try to get some data, and if we get the data we call pFooClass->doStuff
pFooClass->doStuff();
}

所以,基本上功能应该是我创建一个 FooClass 实例。然后我创建了多个 BaseClass 实例,我想将它们添加到 FooClass 中的 vBaseClass vector 中。如果需要,我想使用 vBaseClass[key] 访问 BaseClass 实例并调用 FooClass 中的 doStuff() 函数。我将 FooClass 作为指针参数,因为我仍然想从 doStuff() 函数访问 vBaseClass vector ,然后由 BaseClass 实例调用。

一切正常,但是当我添加 vector 时出现以下错误:

error: ‘BaseClass’ was not declared in this scope
vector<BaseClass> vBaseClass;
error: template argument 1 is invalid
vector<BaseClass> vBaseClass;
error: template argument 2 is invalid
error: ‘BaseClass’ has not been declared
void addBaseClass(BaseClass &baseClass);
error: ‘FooClass’ has not been declared
void updateData(FooClass *pFooClass);
error: no matching function for call to ‘BaseClass::updateData(FooClass*)’
baseClass.updateData(this);

如果有人知道解决方案,非常感谢!

最佳答案

感谢大家,我的问题已经解决,这是工作代码:

FooClass.h

#ifndef TESTPROJECT_FOOCLASS_H
#define TESTPROJECT_FOOCLASS_H
#include <vector>
#include "BaseClass.h"

using namespace std;

class BaseClass;

class FooClass
{
public:
vector<BaseClass> vBaseClass;

void doStuff();
void addBaseClass(BaseClass &baseClass);
};
#endif //TESTPROJECT_FOOCLASS_H

FooClass.cpp

#include <iostream>
#include "FooClass.h"



void FooClass::doStuff()
{
cout << "Well nice done" << endl;
}

void FooClass::addBaseClass(BaseClass &baseClass)
{
baseClass.updateData(this);
vBaseClass.push_back(baseClass);
}

基类.h

#ifndef TESTPROJECT_BASECLASS_H
#define TESTPROJECT_BASECLASS_H
#include "FooClass.h"

class FooClass;
class BaseClass {
public:
void updateData(FooClass *pFooClass);

};

#endif //TESTPROJECT_BASECLASS_H

基础类.cpp

#include "BaseClass.h"


void BaseClass::updateData(FooClass *pFooClass)
{
//We try to get some data, and if we get the data we call pFooClass->doStuff
pFooClass->doStuff();
}

main.cpp//控制台输出“Well nice done”

#include "lib/FooClass.h"

int main()
{
FooClass fooclass;
BaseClass baseclass;
fooclass.addBaseClass(baseclass);

}

感谢大家,这是我的第一个事件和问题,我得到答案的速度给我留下了深刻的印象,非常感谢!

#

因为我被要求说出问题是什么以及我是如何解决的,所以我添加了

到 FooClass.h

#ifndef TESTPROJECT_FOOCLASS_H
#define TESTPROJECT_FOOCLASS_H

class BaseClass;

和 BaseClass.h

#ifndef TESTPROJECT_BASECLASS_H
#define TESTPROJECT_BASECLASS_H

class FooClass;

所以主要问题是我必须在每个其他类的标题中声明 BaseClass 和 FooClass,如上所示。

关于c++ - 将类添加到 vector 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49289857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com