0

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

我的.h:

#ifndef MY_H
#define MY_H

extern int val;     
void print_val();   

#endif

我的.cpp:

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

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

主.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 控制台应用程序。

4

2 回答 2

4

在你的my.cpp你可能想定义你的外部变量,像这样:

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

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

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

于 2012-07-25T00:15:55.633 回答
2

您正在定义函数,但从未声明变量val。这就是为什么找不到它的符号的原因。

于 2012-07-25T00:16:05.017 回答