为什么我不能像这样使用extern?

时间:2015-11-13 12:56:01

标签: c++

我想更改main函数中的g值。然后使用func()func()将根据g值计算值。如果g更改func()的结果将更改。 我写了一些代码,但是编译器给出了错误,有人可以帮我解决这个问题吗?

的main.cpp

enter image description here

TEST.CPP

enter image description here

错误

enter image description here

3 个答案:

答案 0 :(得分:3)

由于你的错误#include "test.cpp",函数func被编译在多个编译单元中。

链接器会反对。

通常,您只使用#include包含头文件。

答案 1 :(得分:1)

问题在于你的main.cpp。由于预处理器,您不应该包含.cpp文件:

test.cpp的内容被复制到main.cpp文件的顶部。因此,当你的编译器紧随其后,它将在你的main.cpp和test.cpp中声明void func(),由多个定义的符号产生。

删除#include“test.cpp”,添加对'void func();'的extern引用在main.cpp中或在test.h头文件中声明原型。

答案 2 :(得分:1)

您不得包含test.cpp。

否则会被编译两次。

  1. 它被编译为属于项目的文件。
  2. 包含时编译
  3. 当链接发生时,它告诉函数存在两次

    答案是:

    1. 创建test.h
    2. 放入func的原型:

      // It is a prototype, no implementation but a ;
      void func();
      
      1. test.h
      2. 中加入main.cpp
         #include "test.h"
        

        此致