我是C ++的新手,我在设置一个简单的类引用时遇到了一些麻烦。
课程:Test.hh
#ifndef _TEST_HH_
#define _TEST_HH_
class Test {
public:
Test (double x);
};
#endif
Class Test.cc
#include "Test.hh"
#include <stdio.h>
Test::Test(double x) {
printf("%f",x);
}
现在我想从另一个类访问这个类:
类:DriverClass.hh
#ifndef _DRIVERCLASS_HH_
#define _DRIVERCLASS_HH_
#include "Test.hh"
class DriverClass {
public:
DriverClass(double y);
Test *t;
}
#endif
类DriverClass.cc
#include "DriverClass.hh"
DriverClass::DriverClass(double y) {
t = new Test(y);
}
但是,我收到一个错误:“未定义引用'Test :: Test(double)?
有谁知道可能出错了什么?请假设直接从main方法(未显示)调用DriverClass。
答案 0 :(得分:2)
您的帖子中仍有错误 - ;
后遗失DriverClass
宣言。其余的都是正确的。
您应该编译并链接所有来源。以下是示例Makefile
和a
样本测试代码。
all: t
t: t.cc DriverClass.cc Test.cc
g++ -Wall -g -o $@ $^
clean:
rm -f *.o t
但是,请注意,通常建议将源分别编译为对象,以便仅编译在上次编译后更改的源。例如:
CFLAGS=-Wall -g
all: t
t: t.o DriverClass.o Test.o
g++ -o $@ $^
t.o: t.cc DriverClass.o Test.o
g++ $(CFLAGS) -c $< -o $@
DriverClass.o: DriverClass.cc
g++ $(CFLAGS) -c $< -o $@
Test.o: Test.cc
g++ $(CFLAGS) -c $^ -o $@
clean:
rm -f *.o t
我使用过GNU编译器。有关$@
和$^
变量的含义,请参阅official documentation。
#include "Test.hh"
#include "DriverClass.hh"
int main(int argc, char const* argv[])
{
DriverClass d(10.4);
return 0;
}
$ make
g++ -Wall -g -o t t.cc DriverClass.cc Test.cc
$ ./t
10.400000
P.S。:不要忘记delete
分配的对象。