我在使用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'的成员
答案 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”,这使得它很难发现)。 它属于“复制/粘贴错误”类别。