使用正常 Header/Source 设置的未解析外部符号
Unresolved External Symbol With Normal Header/Source Setup
我正在进行基本的 C++ 设置。有一个主文件,它从另一个文件 qSort.h/qSort.cpp 调用函数 quickSort。但是,当我尝试这样做时,我得到了未解析的外部符号,这意味着函数原型是可见的,但不是函数定义本身。但是,当我将 quickSort 函数移动到 header 中时,它 运行 就好了,所以一定是识别函数定义有问题。
qSort header 看起来像:
#ifndef __qSort_h__
#define __qSort_h__
int quickSort(int * inputArray);
#endif
qSort 源看起来像(我修复此问题时暂时为空):
#include "qSort.h"
int quickSort(int * inputArray){
return 4;
}
它在我的主文件中被简单地称为:
std::cout << quickSort(arrayInput);
并包含在主源文件中:
#include "qSort.h"
#include "SortingPractice.h"
#define ARRAY_LENGTH 20
有人告诉我,在您的 header 中放置任何实际代码是很糟糕的,所以我正在寻找一些建议,如何在将此代码添加到 运行 时避免这样做。谢谢。
compiler/linker 需要了解程序的所有部分。一种简单的方法是将两个源文件编译在一起,gcc main.cpp qsort.cpp
,这样它将把两个生成的目标文件传递给链接器。
或者如果单独编译,则需要将两个目标文件都传递给链接器。
我正在进行基本的 C++ 设置。有一个主文件,它从另一个文件 qSort.h/qSort.cpp 调用函数 quickSort。但是,当我尝试这样做时,我得到了未解析的外部符号,这意味着函数原型是可见的,但不是函数定义本身。但是,当我将 quickSort 函数移动到 header 中时,它 运行 就好了,所以一定是识别函数定义有问题。
qSort header 看起来像:
#ifndef __qSort_h__
#define __qSort_h__
int quickSort(int * inputArray);
#endif
qSort 源看起来像(我修复此问题时暂时为空):
#include "qSort.h"
int quickSort(int * inputArray){
return 4;
}
它在我的主文件中被简单地称为:
std::cout << quickSort(arrayInput);
并包含在主源文件中:
#include "qSort.h"
#include "SortingPractice.h"
#define ARRAY_LENGTH 20
有人告诉我,在您的 header 中放置任何实际代码是很糟糕的,所以我正在寻找一些建议,如何在将此代码添加到 运行 时避免这样做。谢谢。
compiler/linker 需要了解程序的所有部分。一种简单的方法是将两个源文件编译在一起,gcc main.cpp qsort.cpp
,这样它将把两个生成的目标文件传递给链接器。
或者如果单独编译,则需要将两个目标文件都传递给链接器。