使用C ++的多个源文件

时间:2012-07-25 00:13:07

标签: c++ file header

我将一个简单的项目分解为以下源文件:

my.h:

#ifndef MY_H
#define MY_H

extern int val;     
void print_val();   

#endif

my.cpp:

#include "my.h"
#include <iostream>

void print_val()
{
    std::cout << val;
}

main.cpp中:

#include "my.h"

int main()
{
    val = 4;      
    print_val();  

    return 0;
}

编译时,我收到以下错误:

1>main.obj : error LNK2001: unresolved external symbol "int val" (?val@@3HA)             
1>my.obj : error LNK2001: unresolved external symbol "int val" (?val@@3HA)     
1>c:\...\test.exe : fatal error LNK1120: 1 unresolved externals

为什么会这样?我只想在头文件中声明一个变量和函数,并在一个单独的源文件中定义该函数。我使用的是Visual C ++ 2010 Express,该项目是一个Win32控制台应用程序。

2 个答案:

答案 0 :(得分:4)

在你的my.cpp中你可能想要定义你的外部变量,如下所示:

int val; // optionally you can also initialize it here, like this: int val=0;

这将确保编译器实际为此变量分配一个对象,该对象稍后可以链接到您的可执行文件中。

在相关说明中 - 确保源文件的所有中只有一个此类extern变量的定义,否则您将拥有重复的符号和链接器不会满意

答案 1 :(得分:2)

您正在定义该函数,但您永远不会声明变量val。这就是为什么它的符号无法找到的原因。