我正在使用 C++ 开发一个多文件项目,这给了我链接器错误,我不明白为什么。是的,我一直在搜索,但其他人似乎都遇到了第三方库和-l
链接标志的问题,这里不是这种情况。一小段摘录应该包括所有相关的代码:
主文件
#include "common.h"
//...
void sort_table(byte table[TABLE_LENGTH][2][CIPHER_SIZE], const unsigned int beg = 0, const unsigned int end = TABLE_LENGTH)
{
//..
}
void precompute_table(byte table[TABLE_LENGTH][2][CIPHER_SIZE])
{
//..
#ifdef METHOD_HELLMAN
precompute_hellman_table(table);
#endif
//..
}
int main()
{
//..
byte table [TABLE_LENGTH][2][CIPHER_SIZE];
precompute_table(table);
//..
}
常见的.h
#ifndef COMMON_H
#define COMMON_H
//..
typedef unsigned char byte;
//..
#define METHOD_HELLMAN
#define TABLE_LENGTH 40000
#define CIPHER_SIZE 2
//..
void sort_table(byte[TABLE_LENGTH][2][CIPHER_SIZE]);
//..
#endif
地狱人.h
#ifndef HELLMAN_H
#define HELLMAN_H
#include "common.h"
extern void precompute_hellman_table(byte[TABLE_LENGTH][2][CIPHER_SIZE]);
#endif
地狱人.cpp
#include "hellman.h"
//..
void precompute_hellman_table(byte table[TABLE_LENGTH][2][CIPHER_SIZE])
{
//..
sort_table(table);
}
所以hellman.cpp在main.cpp中使用了一个通用函数,它在common.h中前向声明。使用 MinGW 编译/链接时会产生以下错误:
File Message
obj\Release\hellman.o:hellman.cpp undefined reference to `sort_table(unsigned char (*) [2][2])'
为什么我的代码不正确?