Я работаю над многофайловым проектом на C ++, который дает мне ошибки компоновщика, и я не понимаю, почему. Да, я искал, но другие, похоже, имеют проблемы со сторонними библиотеками и -l
флаги ссылки, что здесь не так. Небольшая выдержка, которая должна включать все соответствующие фрагменты кода:
main.cpp
#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);
//..
}
common.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
hellman.h
#ifndef HELLMAN_H
#define HELLMAN_H
#include "common.h"
extern void precompute_hellman_table(byte[TABLE_LENGTH][2][CIPHER_SIZE]);
#endif
hellman.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])'
Почему мой код неверен?
Вот твоя декларация
// common.h
void sort_table(byte table[TABLE_LENGTH][2][CIPHER_SIZE]);
Вот ваше определение
// main.cpp
void sort_table(byte table[TABLE_LENGTH][2][CIPHER_SIZE],
const unsigned int beg = 0, const unsigned int end = TABLE_LENGTH)
{
...
Увидеть разницу?
Объявление и определение должны быть одинаковыми, за исключением того, что значения по умолчанию должны быть только в объявлении.
Как это
// common.h
void sort_table(byte table[TABLE_LENGTH][2][CIPHER_SIZE],
const unsigned int beg = 0, const unsigned int end = TABLE_LENGTH);
и это
// main.cpp
void sort_table(byte table[TABLE_LENGTH][2][CIPHER_SIZE],
const unsigned int beg, const unsigned int end)
{
...
Других решений пока нет …