最近我一直在学习如何在类中创建方法,以便我只需要编写一个方法,并且对于每个类我实例化我可以调用一个方法,它只能处理对象的变量它调用它,我知道如何只使用main.cpp而没有标题但是当我使用类标题和cpp时,我对如何写这个问题感到困惑。
我有一个类似于我想要实现的代码示例:
#include <iostream>
using namespace::std;
class Object
{
public:
int stuff;
void manageStuff();
Object();
};
void Object::manageStuff()
{
stuff++;
}
Object::Object() : stuff(0) {}
Object object1, object2;
int main() {
for (int i = 0; i < 10; i++)
{
object1.manageStuff();
object2.manageStuff();
cout << object1.stuff << "\n";
cout << object2.stuff << "\n";
}
}
这很好用,允许我有两个Object实例和一个独立于每个实例工作的方法,这是我当前的项目:
main.cpp:
#include <iostream>
#include "Test.h"
using namespace std;
int main()
{
Test test;
for (int i = 0; i < 10; i++)
{
test.count(); // Here's my error "undefined reference to Test::count"
}
return 0;
}
Test.cpp
#include <iostream>
#include "Test.h"
using namespace std;
Test::Test()
{
//ctor
}
Test::~Test()
{
//dtor
}
Test.h
#include <iostream>
#ifndef TEST_H
#define TEST_H
class Test
{
public:
Test();
virtual ~Test();
void count();
int counter();
};
#endif // TEST_H
最后是TestFunctions.h
#include <iostream>
#include "Test.h"
#ifndef TESTFUNCTIONS_H_INCLUDED
#define TESTFUNCTIONS_H_INCLUDED
void Test::count()
{
Test::counter++;
std::cout << Test::counter;
}
#endif // TESTFUNCTIONS_H_INCLUDED
我确信对于一位经验丰富的程序员来说,显然会出现一些非常明显的错误,而且我看起来有点厚,但是我会非常感激任何帮助。 谢谢!
答案 0 :(得分:4)
我建议删除TestFunctions.h
,并将Test::count()
的实施添加到Test.cpp
。目前,TestFunctions.h
标头不包含在任何位置,因此您无法访问main中的定义。
答案 1 :(得分:2)
您在头文件(TestFunctions.h)中定义(即已实现)Test :: count(),但您从未将其包含在任何位置,因此其中的代码未编译。
您应该将其更改为.cpp文件,编译它并将其与其他源文件链接。没有理由不将它放在Test.cpp中。
答案 2 :(得分:0)
将TestFunctions.h重命名为TestFunctions.cpp,使其编译方式与main.cpp相同并链接。
或者,在某处包含TestFunctions.h,例如main.cpp中