这是我用我的问题的视觉效果制作的视频 https://www.youtube.com/watch?v=KqvQivVfAdI
我正在学习C ++的在线教程。到目前为止,一切都很顺利。我正在使用code :: blocks,而教学人员正在使用Eclipse。
我告诉我要写这个特定代码,并且它不使用code :: blocks。我在Cat.cpp
中收到错误:
'目录'尚未宣布
因为我在code :: blocks?
,所以我必须做些什么他的视频,如果有兴趣......
这是我的代码:
的main.cpp
#include <iostream>
#include "Cat.h"
using namespace std;
int main(){
Cat cat1;
cat1.speak();
cat1.jump();
return 0;
}
Cat.h
#ifndef CAT_H_INCLUDED
#define CAT_H_INCLUDED
class Cat{
public:
void speak();
void jump();
};
#endif // CAT_H_INCLUDED'
Cat.cpp
#include <iostream>
#include "Cat.h"
using namespace std;
/*Error on this line*/
void Cat::speak(){
cout << "Meouwwww1!!! " << endl;
}
/*probably on this on too */
void Cat::jump(){
cout << "Jumping to top of bookcase1" << endl;
}
#include <iostream>
using namespace std;
代码放在一起
#ifndef CAT_H
#define CAT_H
class Cat
{
public:
Cat();
void speak();
private:
};
#endif // CAT_H
void Cat::speak()
{
cout << "Meouwww2!!!" << endl;
}
int main(){
Cat cat1;
cat1.speak(); /*error happening here now
error: id returned 1 exit status*/
return 0;
}
答案 0 :(得分:1)
错误:id返回1退出状态
没有。实际错误是
undefined reference to Cat::Cat()
error: ld returned 1 exit status
没有任何“id”可以返回任何退出状态。有ld,它是一个链接器。它的工作是在编译文件后创建可执行文件。它需要所有已编译的文件,并将它们链接在一起。如果您在文件中调用了一个函数,但它没有在您的文件中定义,则链接器会在标准库或您提供的任何其他库中搜索它,并将函数(及其调用的函数)添加到你的可执行文件。
问题在于,你隐式地为你的类Cat调用构造函数,并声明它,但你没有提供它。显然,链接器无法在标准库中找到类的构造函数。
有两种方法可以解决它。一种是提供构造函数,即
Cat::Cat() {
}
或者,您可以删除该行
Cat();
来自您的代码。在这种情况下,将自动生成默认构造函数。 (对于每个类,除非提供任何构造函数,否则将自动生成不带参数的构造函数。)
答案 1 :(得分:-4)
您需要为类Cat添加构造函数和析构函数。
在快速修复的标题中,您可以执行以下操作: 猫(){} 〜猫(){}