类没有名为的成员

时间:2013-07-05 06:02:19

标签: c++

我在使用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

Class .cpp:

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

Attack::Attack() {

}

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

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

错误:

  

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

9 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:1)

在大多数情况下,问题出在人为方面。就我而言,我使用了一些名称相似的类。我在一个类下添加了empty()方法;但是,我的代码从另一个类调用了empty()方法。那一刻,思想被困住了。我正在运行make clean,然后重新制作以为它是使用了较旧版本的标题。走了片刻后,我立即发现了这个问题。我们程序员倾向于首先责怪别人。也许我们应该坚持要求自己先犯错。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分:-1)

你还记得在大括号中加入右括号吗?

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

using namespace std;

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

答案 6 :(得分:-1)

尝试在标题中定义函数

 #ifndef ATTACK_H
 #define ATTACK_H

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

 #endif // ATTACK_H

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

答案 7 :(得分:-1)

我知道这已经有一年了,但我遇到了同样的问题。我的问题是我的实现文件中没有构造函数。我认为这里的问题可能是#endif ...

之后的头文件末尾的注释标记

答案 8 :(得分:-1)

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