Неопределенная ссылка на ссылку компоновщика в нескольких файлах C ++ проекта

Я работаю над многофайловым проектом на 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])'

Почему мой код неверен?

1

Решение

Вот твоя декларация

// 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)
{
...
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector