简单的面向对象Cat尚未声明

时间:2016-05-20 00:28:33

标签: c++

这是我用我的问题的视觉效果制作的视频 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;
}

错误图片 https://gyazo.com/bb3574ea504f2357c7ea2987facc9874

2 个答案:

答案 0 :(得分:1)

  

错误:id返回1退出状态

没有。实际错误是

undefined reference to Cat::Cat()
error: ld returned 1 exit status

没有任何“id”可以返回任何退出状态。有ld,它是一个链接器。它的工作是在编译文件后创建可执行文件。它需要所有已编译的文件,并将它们链接在一起。如果您在文件中调用了一个函数,但它没有在您的文件中定义,则链接器会在标准库或您提供的任何其他库中搜索它,并将函数(及其调用的函数)添加到你的可执行文件。

问题在于,你隐式地为你的类Cat调用构造函数,并声明它,但你没有提供它。显然,链接器无法在标准库中找到类的构造函数。

有两种方法可以解决它。一种是提供构造函数,即

Cat::Cat() {
}

或者,您可以删除该行

Cat();

来自您的代码。在这种情况下,将自动生成默认构造函数。 (对于每个类,除非提供任何构造函数,否则将自动生成不带参数的构造函数。)

答案 1 :(得分:-4)

您需要为类Cat添加构造函数和析构函数。

在快速修复的标题中,您可以执行以下操作: 猫(){} 〜猫(){}