Member 13219995 Ответов: 1

Определите fun в файле hpp и вызовите его в другом файле cpp, но потерпите неудачу и поднимите ошибку множественного определения


Я определяю print4x4Matrix в PointCloudProcess.ГЭС файл выглядит следующим образом:
//print 4*4 matrix
void print4x4Matrix(const Eigen::Matrix4d & matrix)
{
	printf("Rotation matrix :\n");
	printf("    | %6.3f %6.3f %6.3f | \n", matrix(0, 0), matrix(0, 1), matrix(0, 2));
	printf("R = | %6.3f %6.3f %6.3f | \n", matrix(1, 0), matrix(1, 1), matrix(1, 2));
	printf("    | %6.3f %6.3f %6.3f | \n", matrix(2, 0), matrix(2, 1), matrix(2, 2));
	printf("Translation vector :\n");
	printf("t = < %6.3f, %6.3f, %6.3f >\n\n", matrix(0, 3), matrix(1, 3), matrix(2, 3));
	return;
}

в main.cpp файл включите этот файл hpp и вызовите print4x4matrix fun но поднимите ошибку следующим образом:
错误 2 ошибка LNK2005: "Void и как __cdecl print4x4Matrix(класс Эйген::Матрица&ЛТ;двойной,4,4,0,4,4&ГТ; строительства &усилителя;)" (?print4x4Matrix@@YAXAEBV?$Матрица@Н 03$$03$0А@03$03$@Эйген@@@Z) в 已经在 correspondence_grouping.program параметр obj 中定义 D:\vs13 \experiment\registration\CorrespondenceGroupingModified9-14\CorrespondenceGroupingModified9-14\CorrespondenceGroupingModified\PointCloudProcess.параметр obj CorrespondenceGroupingModified
Error 3 ошибка lnk1169 :一一的的号号 D:\vs13 program\experiment\registration\CorrespondenceGroupingModified9-14\CorrespondenceGroupingModified9-14\x64\Debug\CorrespondenceGroupingModified.exe 1 1 CorrespondenceGroupingModified


есть и некоторые другие забавные определения в PointCloudProcess.ГЭС файл(как показано ниже), но они не поднимают ошибку.
template <class PointT>
bool pointCloudICP(pcl::PointCloud<PointT> PointSource, pcl::PointCloud<PointT> PointTarget, pcl::PointCloud<PointT> &outPointCloud)
{
//...
}

в чем проблема ? жду вашего ответа, Спасибо!

Что я уже пробовал:

когда я изменить print4x4Matrix удовольствие определиться с "встроенные" ошибки исчезают!

1 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Кажется, вы включили то же самое заголовок файл в более чем одном файле источник файл...
Хотя это не запрещено, он может создавать ошибки компилятора, поэтому большинство заголовочных файлов имеют защиту от multiply include...
Что-то вроде этого:

#ifndef MY_HEADER_H
#define MY_HEADER_H

// header body...

#endif MY_HEADER_H


Member 13219995

Я могу подтвердить, что просто включил файл в main.cpp, и у меня была #pragma один раз во всем файле!