21

我在使用函数中的类对象从类访问函数时遇到问题main。我只是想为类创建对象并使用该对象来访问该类.cpp文件中的函数。我不断收到错误,我什至制作了最简单的程序来测试它,但我仍然收到错误。

主要的:

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

using namespace std;

int main()
{
    Attack attackObj;
    attackObj.printShiz();
}

类头:

#ifndef ATTACK_H
#define ATTACK_H

class Attack
{
    public:
        Attack();
        void printShiz();
    protected:
    private:
};

#endif // ATTACK_H

.cpp 类:

#include <iostream>
#include "Attack.h"
using namespace std;

Attack::Attack() {

}

void Attack::printShiz() {
    cout << "Test" << endl;
}

如何修复此错误?每次我尝试通过在printShiz()函数中Attack使用对象来访问类中的main函数时,都会出现错误,并且它认为该函数不存在于此类中。

错误:

错误:“class Attack”没有名为“printShiz”的成员

4

9 回答 9

21

我有一个类似的问题。事实证明,我从一个旧文件夹中包含了一个同名的旧头文件。我删除了旧文件,将#include 指令更改为指向我的新文件,一切都很好。

于 2014-09-23T19:50:28.890 回答
2

大多数情况下,问题是由于人为方面的一些错误造成的。就我而言,我使用了一些名称相似的类。我在一个类下添加了 empty() 方法;但是,我的代码是从另一个类调用 empty() 方法。那一刻,心被卡住了。我正在运行 make clean,并且 remake 认为这是使用了一些旧版本的标头。走了一会儿,我马上就发现了这个问题。我们程序员倾向于首先责备他人。也许我们应该坚持自己首先是错的。

有时,我忘记将最新更新写入磁盘并查看代码的正确版本,但编译器看到的代码版本错误。这种情况在 IDE 上可能不是问题(我使用 vi 进行编码)。

于 2018-08-23T22:01:40.683 回答
1

我有类似的问题。我的包含类定义的头文件不起作用。我无法使用该类的成员函数。所以我只是将我的类复制到另一个头文件中。现在一切正常。

于 2020-08-20T15:37:38.460 回答
0

尝试在标题中定义函数

 #ifndef ATTACK_H
 #define ATTACK_H

 class Attack {
     public:
         Attack(){};
         void printShiz(){};
     protected:
     private: };

 #endif // ATTACK_H

并编译。如果编译器没有抱怨重复定义,这意味着您忘记编译 Class.cpp 文件,那么您只需要这样做(将其添加到您的 Makefile/project/solution...您使用的是哪个工具链?)

于 2013-07-05T08:22:54.900 回答
0

你记得在 main 中包含右括号吗?

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

using namespace std;

int main()
{
  Attack attackObj;
  attackObj.printShiz();
}
于 2013-07-05T06:08:49.233 回答
0

我知道这是一岁了,但我遇到了同样的问题。我的问题是我的实现文件中没有构造函数。我认为这里的问题可能是#endif 之后头文件末尾的注释标记...

于 2014-11-24T22:40:47.927 回答
0

发生错误的原因是因为所有文件都未被识别为位于同一项目目录中。解决此问题的最简单方法是简单地创建一个新项目。

文件 -> 项目 -> 控制台应用程序 -> 下一步 -> 选择 C ​​或 C++ -> 命名项目并选择要在其中创建项目的文件夹 -> 然后单击完成。

然后通过单击新建 -> 类来创建类和头文件。给类命名并取消选中“使用相对路径”。确保在同一个项目文件夹中创建类和头文件。

完成这些步骤后,IDE 的左侧会显示 Sources 和 Headers 文件夹,其中 main.cpp、theclassname.cpp 和 theclassname.h 都排列得很方便。

于 2020-08-24T09:30:21.623 回答
0

您的 .h 中有错字吗?当我在我的 main 中正确调用该方法时,我曾经遇到过这个错误,但是 .h/.cpp 中有一个错字(方法名称中的“g”与“q”,这使得很难发现)。它属于“复制/粘贴错误”类别。

于 2015-11-20T12:07:23.737 回答
0

也许我晚了 6.5 年。但我正在回答,因为其他人现在可能仍在搜索。我遇到了同样的问题,到处搜索。但后来我意识到我已经把我的代码写在了一个空文件中。如果您创建一个项目并在其中编写代码,则不会出现此错误。

于 2020-02-27T07:36:22.863 回答