gpt4 book ai didi

c++ - 递归模板 : compilation error under g++

转载 作者:太空狗 更新时间:2023-10-29 23:31:24 24 4
gpt4 key购买 nike

我正在尝试递归地使用模板来定义(在编译时) double 的 d 元组。下面的代码在 Visual Studio 2010 中编译良好,但 g++ 失败并提示它“无法直接调用构造函数‘point<1>::point’”。

谁能解释一下这里发生了什么?

非常感谢,乔

#include <iostream>
#include <utility>

using namespace std;

template <const int N>
class point
{

private:
pair<double, point<N-1> > coordPointPair;

public:

point()
{
coordPointPair.first = 0;
coordPointPair.second.point<N-1>::point();
}

};

template<>
class point<1>
{

private:
double coord;

public:

point()
{
coord= 0;
}

};

int main()
{
point<5> myPoint;

return 0;
}

最佳答案

你想做什么:

coordPointPair.second.point<N-1>::point();

看起来您想显式调用 point默认构造函数 - 在 pair 时已经被调用被 build 。您不能直接调用构造函数(除非您使用 placement new,这在这种情况下没有意义)

只需删除该行即可。

如果你出于某种原因想要覆盖已经构建的 .second通过从临时 point<N-1> 分配给它你可以用coordPointPair.second = point<N-1>();来做到这一点.

如果您在更复杂的情况下想要将参数传递给 point构造函数,您可以在初始化列表中执行此操作:

point(your_type your_arg) : 
coordPointPair(
pair<double, point<N-1> >(0.0, point<N-1>(your_arg_here))
)
{
}

关于c++ - 递归模板 : compilation error under g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com