当我在头文件中描述函数的原型并在MoveMatrix.cpp上实现函数时,我得到了错误:编译器说"error: redifinition of nc::NdArray translate(float,float,float)",尽管我没有在MoveMatrix.h之外的其他文件中描述或提到这个函数。我从MoveMatrix.cpp的4行中得到了错误!
这是MoveMatrix.h
//MoveMatrix.h
#pragma once
#include<NumCpp.hpp>
nc::NdArray<float> translate(float trX, float trY, float trZ) {};
nc::NdArray<float> rotation_X(float angle) {};
nc::NdArray<float> rotation_Y(float angle) {};
nc::NdArray<float> rotation_Z(float angle) {};
nc::NdArray<float> scale(float scale_coeff) {};我是MoveMatrix.cpp
//MoveMatrix.cpp
#include <iostream>
#include "MoveMatrix.h"
nc::NdArray<float> translate(float trX, float trY, float trZ)
{
return nc::NdArray<float>{
{1, 0, 0, 1},
{0, 1, 0, 0},
{0, 0, 1, 0},
{trX, trY, trZ, 1}
};
}
nc::NdArray<float> rotation_X(float angle)
{
return nc::NdArray<float>{
{1, 0, 0 , 0},
{0, cos(angle), sin(angle), 0},
{0, -sin(angle), cos(angle), 0},
{0, 0, 0, 1}
};
}
nc::NdArray<float> rotation_Y(float angle)
{
return nc::NdArray<float>{
{cos(angle), 0, -sin(angle), 0},
{0, 1, 0, 0},
{sin(angle), 0, cos(angle), 0},
{0, 0, 0, 1}
};
}
nc::NdArray<float> rotation_Z(float angle)
{
return nc::NdArray<float>{
{cos(angle), sin(angle), 0 , 0},
{-sin(angle), cos(angle), 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
}
nc::NdArray<float> scale(float scale_coeff)
{
return nc::NdArray<float>{
{scale_coeff, 0, 0, 0},
{0, scale_coeff, 0, 0},
{0, 0, scale_coeff, 0},
{0, 0, 0, scale_coeff}
};
}发布于 2021-02-23 17:54:20
后缀{}表示函数在标头中定义。这样就违反了一个定义规则,编译就会失败。移除它们以将语句转换为转发声明。
换句话说,
nc::NdArray<float> translate(float trX, float trY, float trZ) {};变成了
nc::NdArray<float> translate(float trX, float trY, float trZ);诸若此类。
https://stackoverflow.com/questions/66338460
复制相似问题