相关疑难解决方法(0)

为什么模板只能在头文件中实现?

引自C++标准库:教程和手册:

目前使用模板的唯一可移植方法是使用内联函数在头文件中实现它们.

为什么是这样?

(澄清:头文件不是唯一的便携式解决方案.但它们是最方便的便携式解决方案.)

c++ templates c++-faq

1660
推荐指数
14
解决办法
46万
查看次数

关于函数的C++ extern关键字.为什么不包含头文件?

如果我理解正确,这意味着

extern void foo();
Run Code Online (Sandbox Code Playgroud)

函数foo在另一个翻译单元中声明.

1)为什么不#include声明此函数的头?

2)链接器如何知道在链接时寻找函数的位置?

编辑:也许我应该澄清上面的声明然后使用该函数

foo();
Run Code Online (Sandbox Code Playgroud)

它从未在此翻译单元中定义.

c++ linker extern

45
推荐指数
4
解决办法
5万
查看次数

内联函数链接器错误

我正在尝试使用特定类的内联成员函数.例如,没有内联的函数声明和实现是这样的:

在头文件中:

int GetTplLSize();
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中:

int NeedleUSsim::GetTplLSize()
{
    return sampleDim[1];
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,如果我将"inline"关键字放在实现和声明中的任何一个中,以及两个地方,我都会收到链接器错误,如下所示:

 Creating library C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.x and object C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.exp 
mexfunction.obj : error LNK2019: unresolved external symbol "public: int __thiscall NeedleUSsim::GetTplLSize(void)" (?GetTplLSize@NeedleUSsim@@QAEHXZ) referenced in function _mexFunction 
mexfunction.mexw32 : fatal error LNK1120: 1 unresolved externals 

  C:\PROGRA~1\MATLAB\R2008B\BIN\MEX.PL: Error: Link of 'mexfunction.mexw32' failed. 

为了摆脱这个错误需要做什么(即在制作这些内联成员函数方面我做错了什么)?

c++ inline linker-errors

28
推荐指数
3
解决办法
2万
查看次数

标签 统计

c++ ×3

c++-faq ×1

extern ×1

inline ×1

linker ×1

linker-errors ×1

templates ×1