类没有名为的成员
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”的成员 [重复]
ASIO UDP:std::allocator<void> 类没有名为“construct”的成员