【问题标题】:Return template type from template class从模板类返回模板类型
【发布时间】:2018-02-21 15:03:46
【问题描述】:

我在尝试使以下代码正常工作时遇到错误

template<typename var>
struct Point
{
    var x;
    var y;

    constexpr Point() : x( 0 ), y( 0 ) {
    }
    constexpr Point( const var _x, const var _y ) : x( _x ), y( _y ) {
    }
    var GetX() const { return x; }
    var GetY() const { return y; }
};

template<typename var>
struct Rect
{
    var x, y;
    var w, h;

    constexpr Rect() : x( 0 ), y( 0 ), w( 0 ), h( 0 ) {
    }
    constexpr Rect( const var _x, const var _y, const var _w, const var _h ) : x(_x), y(_y), w(_w), h(_h) {
    }

    var Left() const { return x; }
    var Right() const { return x + w; }
    var Top() const { return y; }
    var Bottom() const { return y + h; }
    Point<var> LT() const { return Point<var>( x, y ) };
    Point<var> RT() const { return Point<var>( x + w, y ) };
    Point<var> LB() const { return Point<var>( x, y + h ) };
    Point<var> RB() const { return Point<var>( x + w, y + h ) };
};

我的 struct Rect 中的 Point 返回似乎导致了很多难以理解的错误。有人会碰巧知道这样做的正确方法吗?

【问题讨论】:

  • 哪些错误?将它们包含在问题中会有所帮助。
  • 令人惊讶的是,考虑到您在这里的经验,您没有将整个错误粘贴到您的问题中,这是一种标准做法
  • @chris 我没有包含该错误,因为它似乎没有为问题增加任何价值。 MSVC 吐出的确切错误是包含上述文件的任何文件都存在语法错误,但没有显示与上述文件相关的错误。我觉得添加错误只会使问题变得混乱并增加混乱,人们要求我然后包含 MSVC 正在谈论的其他文件,而我可以清楚地看到其他文件没有任何问题。但是,如果人们希望我不管添加错误,请告诉我。
  • @PasserBy 请参考我上面对克里斯的评论。
  • FWIW,将代码粘贴到 gcc.godbolt.org 会在 GCC 和 Clang 中出现非常直接的错误。当它这么容易时,通常值得尝试不同的编译器。

标签: c++ templates


【解决方案1】:

后面没有分号:

return Point <var> (x,y)

【讨论】:

  • 感谢您的回答。看到这个答案后,我立即“啊”了一声,并意识到我错过了多么粗心,如果回答者没有发布这个,我可能会再花几个小时。谢谢!
  • 然而,在 StackOverflow 上使用了 4 年多之后,我发现看到有多少人现在似乎更喜欢根据一般规则和预先形成的看法投票否决问题,而不是想帮助面临麻烦的人,这令人沮丧。再次感谢您成为少数仍然优先考虑提供帮助的例子 - 这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
相关资源
最近更新 更多