好的,我仍然习惯于再次使用C ++,所以这个错误看起来很简单。我试图创建一个具有三个成员函数的简单类(我只是试图在其中调用其中一个)。所以我创建了类,实例化了一个对象,然后尝试使用该对象调用该函数,并出现此错误:
Code.cpp :(。text + 0x15):对`Code :: genCode()'
的未定义引用我已经仔细检查过它是否是函数本身的错误,但事实并非如此。我已经看到其他人发布了关于这个问题的帖子,但似乎有很多情况和解决方案。无论如何,这里是代码:
#include <vector>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <list>
using namespace std;
class Code {
public:
int genCode();
int checkCorrect();
int checkIncorrect();
};
int main()
{
Code c1;
c1.genCode();
}
////////////////FUNCTIONS/////////////////////////
int genCode()
{
vector <int> newcode;
srand(time(NULL));
for(int i = 0; i < 9; i++){
int x;
x = (rand() % 6);
if (find(newcode.begin(),newcode.end(), x) == newcode.end())
{
newcode.push_back(x);
}
}
if (newcode.size() > 4)
{
newcode.pop_back();
}
for(int i = 0; i < 4; i++)
{
return newcode[i];
}
}
int checkCorrect()
{
}
int checkIncorrect()
{
}
答案 0 :(得分:1)
您需要在方法名称
之前放置类名格式是 'returnType Classname :: methodname { 代码 }“
int code::genCode()
{
//codes
}
或者您也可以在课堂上编写代码
答案 1 :(得分:0)
将班级方法的实施更改为以下内容:
int Code::genCode()
{
...
}
int Code::checkCorrect()
{
...
}
int Code::checkIncorrect()
{
...
}
答案 2 :(得分:0)
您正在定义课外的功能。把它们放在类中,然后你不需要在类中声明它们。直接定义它们。
johnsonsam -> ['johnson', 'sam']
samjohnson -> ['sam', 'johnson']
sjohnson -> ['s', 'johnson']
john -> ['john']
johnson_sam -> ['johnson', 'sam']
输出:
内部genCode。仅用于调试目的。
答案 3 :(得分:0)
功能
int genCode()
是什么叫做自由功能。它不受一个类的约束。
为了让编译器知道genCode是类的一部分,你必须通过明确说明genCode所属的命名空间来告诉它。
int Code::genCode()
然而,由于代码代码完全包含在一个文件中,因此遵循CodeRunner的建议将导致更清晰的实现。
但是为什么有人想要把所有东西分开呢?
将类定义与方法实现分开允许您将类定义放在一个文件中,'h
头文件和实现文件中的方法,通常是.cpp
文件。然后,头文件与Code对象的用户共享,并且实现文件可以编译到库中并从调用者视图中隐藏。
有很多理由可以做到这一点,但大多数都与创建预编译库和使用它们减少构建时间有关。
使用库,您可以构建一次库,然后一遍又一遍地编译使用该库的其余代码,直到您正确完成。您是否可以想象如果每次修复错误并想要测试时必须重建C ++标准库,那么构建程序需要多长时间?
曾经有过这样的工作。每次我修复时都要花四个小时编译第三方网络代码,因为公司的偏执构建系统每次都会重建所有内容。关闭一个错误? 4个小时。需要添加调试线吗? 4个小时。您可以每天制作并测试三项更改。当然,你可以批量修复一堆修复,但如果一个修复失败并打破了系统,那是哪一个?迟早你会被缩小到一个爬行,一次调整,构建,测试,分析一个。幸运的是,我正在签订合同并按小时付款。
另一个很好的例子是您可以拥有一个支持Windows的库以及支持QNX和其他操作系统的其他库。所有都使用相同的标题,用户可以编写一个程序,理论上,只需重新编译用户的代码就可以在所有支持的平台上运行。它永远不会那么干净,但人们可以梦想。
甚至可以用更新的库替换库,而无需更改或编译用户代码,并且可以根据不同需求存在库的不同变体。例如,带有额外日志记录的调试版本。
也许这种实施不适合公众的目光。用户可以看到库中的标题和调用函数,但不多了。