这是一个非常基本的问题,令我感到沮丧.让我们说在一个解决方案中,我有两个项目.让我们调用第一个项目SimpleMath.它有一个头文件"Add.h",它有
int add(int i, int j)
和实现"Add.cpp"有
int add(int i, int j) { return i+j; }
现在让我们说在第二个项目中我想使用add函数.但是,这段代码:
#include"..\SimpleMath\Add.h"
int main() { add(1, 2); }
导致"未解决的外部符号".如何让第二个程序"知道".cpp文件中的实际实现.作为旁注,所有代码都是虚构的,这不是我实际编程的方式.
你得到的错误的原因是,通过包含头文件,你告诉编译器有一个符号
int add (int, int)
这将在链接期间出现,但您实际上并未在项目中包含该符号(函数的代码).解决该问题的一种快速方法是简单地将Add.cpp添加到两个项目中.但"好"的解决方案可能是通过更改项目属性中的项目类型将SimpleMath放入库而不是应用程序.
顺便说一句,您可能需要某种机制来防止多个包含该头文件.我通常使用#pragma once
哪个应该没问题,如果你坚持使用Visual C++,但这可能不是完全可移植的,所以如果你想要可移植性,那么采用更传统的方法将头文件包装在#ifndef
-block中,如下:
#ifndef __ADD_H #define __ADD_H int add (int i, int j); #endif
祝好运.
如果您正在尝试将C库链接到C++项目中,则需要执行类似的操作
extern "C" { #include "..\SimpleMath\Add.h" }
因为C和C++使用不同的符号名称.