好的,所以我决定不时阅读一点c++,只是为了对语法有一个基本的了解。我熟悉Java和Python。我已经通过C++傻瓜书“阅读”了,我以为自己掌握了-直到尝试创建最简单的类为止。
这个想法很简单:一个类(命名为ape)采用一个参数int,该参数存储为私有(private)字段。它还有另一个函数,一个返回函数,该函数返回该字段。 main()创建一个实例,并调用该方法以打印出变量。
这个想法是使用字符串而不是int,但我无法使其正常工作,因此我决定改用int,这显然也不起作用。
如果有兴趣,我可以使用Code::blocks,Windows 7和g++编译器。
这些是类:
Main.cpp
#include <iostream>
#include "ape.h"
using namespace std;
int main()
{
ape asd(10);
cout << asd.getNumber();
}
猿
#ifndef APE_H
#define APE_H
class ape
{
public:
ape(int num);
virtual ~ape();
int getNumber();
protected:
private:
int number;
};
#endif // APE_H
和ape.cpp
#include "ape.h"
using namespace std;
ape::ape(int num)
{
tall = num;
}
ape::~ape()
{
//dtor
}
int getNumber()
{
return number;
}
我收到的错误消息对我来说似乎是非常随机的,因为它们在我所做的每个更改中都在完全更改,并且不是很容易解释。我可以看到自己听起来像个自大的傻瓜,而这整个困惑都是编译器的错误,但是我真的看不到错误消息与代码中的错误之间的任何联系。
第一次来这里,对我好一点。 :)
我想我应该添加错误消息:
未定义对'ape::ape(int)'的引用
最佳答案
您正在为不存在的变量分配值。
更改:
ape::ape(int num)
{
tall = num;
}
至:
ape::ape(int num) :
number(num)
{
}
而且,我不知道您为什么编写析构函数,以及为什么决定将其设置为
virtual
。默认情况下,编译器将生成一个空的析构函数(类似于您的析构函数,但不是virtual
)。如果您不打算进行多态性(带有继承和所有“东西”),则可以从代码中删除此析构函数,因为它只会带来复杂性而无济于事。您还需要在方法定义前面加上类的名称:
int ape::getNumber() // Note the "ape::" here
{
return number;
}
最后一件事:
您可能还想更改
main
:int main()
{
ape asd(10);
cout << asd.getNumber() << endl;
}
仅当在缓冲流时输出
cout
或endl
时,才会打印flush
中放入的内容。关于您的最后编辑:
您可能无法与
ape.o
链接。在编译文件夹中,应该具有源文件和每个.o
的.cpp
。您必须将这些对象文件链接在一起以构建程序。此消息表明链接器无法找到ape::ape(int)
的定义。也就是说,他可能没有得到ape.o
文件。长话短说,这是您的编译命令的外观(使用g++):
g++ -o main.o -c main.cpp
g++ -o ape.o -c ape.cpp
g++ -o program main.o ape.o