【问题标题】:Multiple source files with C++使用 C++ 的多个源文件
【发布时间】:2012-07-25 00:13:07
【问题描述】:

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

我的.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;
}

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

【问题讨论】:

  • 你已经成功声明了变量,但是你必须在cpp中定义它,就像函数一样。

标签: c++ file header


【解决方案1】:

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

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

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

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

【讨论】:

  • 如果回答了您的问题,请随时将其标记为这样,以便任何正在搜索网络并偶然发现该帖子的人都会知道这是否是所需的信息
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多