这里是 C++ 新手。我很确定这个问题有一个简单而明显的解决方案,但即使在阅读了数十个类似的问答之后,我仍然没有更接近它。但这是我的问题:
我有一个模板类:
template<class T>
struct KalmanSmoother
{
Eigen::MatrixX<T> P;
...
KalmanSmoother(int dynamParams, int measureParams, int controlParams = 0);
...
}
我可以毫无问题地使用它,就像这样:
KalmanSmoother<float> smoother(4, 2);
smoother.P = Eigen::Matrix4f {
{0.1f, 0.0f, 0.1f, 0.0f},
{0.0f, 0.1f, 0.0f, 0.1f},
{0.1f, 0.0f, 0.1f, 0.0f},
{0.0f, 0.1f, 0.0f, 0.1f}
};
...
就像魅力一样。但是,当我想重构代码并将初始化部分提取到其他函数中时,编译器(MSVC 19.31.31104.0)开始哭泣。函数提取如下所示:
// Declaration in the header:
void setupKalmanSmoother(KalmanSmoother<float> & smoother);
// Definition in the .cpp
inline void Vehicle::setupKalmanSmoother(KalmanSmoother<float> & smoother)
{
smoother.P = Eigen::Matrix4f {
{0.1f, 0.0f, 0.1f, 0.0f},
{0.0f, 0.1f, 0.0f, 0.1f},
{0.1f, 0.0f, 0.1f, 0.0f},
{0.0f, 0.1f, 0.0f, 0.1f}
};
...
}
我想这样称呼它:
KalmanSmoother<float> smoother(4, 2);
setupKalmanSmoother(smoother);
没什么神奇的。它应该可以工作(我想......),但我收到这个编译器错误:
error C7568: argument list missing after assumed function template 'KalmanSmoother'
错误消息指向标头中的声明。值得一提的是,模板类的所有函数定义都在头文件中,因为当我出于习惯将定义放入 .cpp 文件时,我已经遇到了完全相同的错误。
那么我错过了什么?
提前致谢!
我遇到了一个非常相似的错误。就我而言,这是由于循环#includes造成的。
在创建模板类的数据成员时,我遇到了同样的错误。
List<Graphics::RenderObject*> m_RenderObjects;
我的实例中的修复是我需要将范围限制在“List<>”所在的命名空间中。
STD::List<Graphics::RenderObject*> m_RenderObjects;
它没有说“List”未定义,而是给出了错误 7568。这是误导性的。 我建议检查类似的问题。
此错误代码也有类似的问题,编译器无法编译以创建堆栈