类没有名为的成员

Posted

技术标签:

【中文标题】类没有名为的成员【英文标题】:Class has no member named 【发布时间】:2013-07-05 06:02:19 【问题描述】:

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

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

错误:

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

【问题讨论】:

代码看起来不错。也许它正在尝试使用旧版本的标头。 有时“重建所有”可以解决所有问题。 刚刚试了一下,还是一样的错误:/ 您应该发布一些重现问题的代码。您发布的代码看起来不错。 建议 2:复制 printShiz() 并将所有内容替换为复制的。有时它所写的内容似乎相同,但是当您在记事本++ 上更改为 ANsi 时,您会发现代码不同。当您在键盘布局之间切换很多时会发生 【参考方案1】:

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

【讨论】:

这是问题的正确答案。它有时会发生。您将头文件复制到另一个路径并对其进行更改,但是由于您在项目中的某个位置包含了旧头文件,因此对成员函数、变量等的更改永远不会出现,并且您会遇到这种“奇怪”的错误。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

using namespace std;

int main()

  Attack attackObj;
  attackObj.printShiz();

【讨论】:

是的,我只是不小心把它从帖子中遗漏了。【参考方案5】:

尝试在标题中定义函数

 #ifndef ATTACK_H
 #define ATTACK_H

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

 #endif // ATTACK_H

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

【讨论】:

我使用的工具链是mingw32-g++.exe 如果他“忘记编译Class.cpp”会给出未定义的引用链接错误,而不是显示的编译错误【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

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

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

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

【讨论】:

以上是关于类没有名为的成员的主要内容,如果未能解决你的问题,请参考以下文章

Swift 类“MyClass”没有名为“My_Var”的成员 [重复]

二维向量表示类没有名为 push_back 的成员

ASIO UDP:std::allocator<void> 类没有名为“construct”的成员

npm未安装node-gyp,错误:“类v8 :: Object”没有名为“ ForceSet”的成员

django 模型-----模型成员

2 Model层-模型成员