C ++如何引用其他类?

时间:2016-10-06 15:44:01

标签: c++ class object reference

我是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。

1 个答案:

答案 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

t.cc

#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分配的对象。