函数已声明但未定义?然而,它是定义的
Function Declared But Not Defined? Yet It Is Defined
header.h
namespace VectorMath {
static FVector Make(float X, float Y, float Z);
}
文件.cpp
namespace VectorMath {
static FVector Make(float X, float Y, float Z)
{
FVector ret;
ret.X = X;
ret.Y = Y;
ret.Z = Z;
return ret;
}
}
错误
1>c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xstring(541):错误 C2129:静态函数"FVector VectorMath::Make(float,float,float)"已声明但未定义 1> c:\programming****\vectormath.h(19):参见 'VectorMath::Make' 的声明
该错误将我指向 xstring(标准字符串库的一部分)第 541 行,它似乎与任何事情完全无关。
我想指出的是,删除"静态"会给我链接器错误,告诉我"Make"是一个未解析的外部符号......
您需要删除static
,否则该函数在不同的编译单元中将不可见。只需使用
namespace VectorMath {
FVector Make(float X, float Y, float Z);
}
定义也是如此。
如果这不能解决您的链接问题,您需要确保实际正确编译和链接file.cpp
,但static
肯定是错误的。
关于您发现问题的评论,即在使用 -functions 时无法将声明与定义分开inline
:是的,这与生成的方法符号及其可见性具有类似的效果。我觉得奇怪的是,你要求以此作为接受答案的先决条件,尽管你从未在问题中提到inline
。我怎么会知道你只是添加了你并不真正理解的随机关键字?这不是别人帮助你解决问题的好基础。您需要发布真实的代码并对我们诚实。如果将来提出更多问题,请记住这一点。
如果有帮助,代码在单个编译单元中工作
http://codepad.org/mHyB5nEl
namespace VectorMath {
class FVector{
public:
float X;
float Y;
float Z;
void show (){
std::cout<< "n t" <<X << "t "<< Y <<"t "<<Z;
}
};
static FVector Make(float X, float Y, float Z);
}
namespace VectorMath {
static FVector Make(float X, float Y, float Z)
{
FVector ret;
ret.X = (float)X;
ret.Y = (float)Y;
ret.Z = (float)Z;
return ret;
}
}
int main()
{
VectorMath::FVector result = VectorMath :: Make(float(1.2) , float(2.2) ,float(4.2));
result.show();
}
输出:
1.2 2.2 4.2
您必须删除定义中的"静态",无论如何,此函数没有理由是静态的。因此,您也可以将其放在声明中。
所以你可以像这样写定义它:
FVector VectorMath::Make(float X, float Y, float Z)
{
FVector ret;
ret.X = X;
ret.Y = Y;
ret.Z = Z;
return ret;
}
而这个:
namespace VectorMath
{
FVector Make(float X, float Y, float Z)
{
FVector ret;
ret.X = X;
ret.Y = Y;
ret.Z = Z;
return ret;
}
}
干杯
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 模板声明中省略了c++类型参数.然而,在成员函数的定义中呢
- 函数已声明但未定义?然而,它是定义的