【问题标题】:Is there any way to have struct-2 variables in struct-1, if struct-2 is declared after struct-1?如果 struct-2 在 struct-1 之后声明,是否有任何方法可以在 struct-1 中包含 struct-2 变量?
【发布时间】:2020-07-20 21:22:51
【问题描述】:

我有一组点,它们都是线段的一部分。所以我想为 point 创建一个结构,这样它就有一个变量指向它所在的 line

template<typename T>
struct point{
    int x,y;
    T* ln;
};

struct line{
    point U,L;
};

point a;
a.x = 1;
a.y = 1;

point b;
b.x = 0;
b.y = 0;
    
line seg1;
seg1.U = a;
seg1.L = b;
    
a.ln = seg1;
b.ln = seg1;

在代码中,我收到以下错误:

'invalid use of template-name 'point' without an argument list'

我认为我们不应该这样处理这个问题。我确实看到了一些问题,例如在 line 结构中创建 point 时,T 是未知的(我尝试添加一个构造函数,但是似乎也不起作用)。 有没有更好的方法来解决这个问题?

【问题讨论】:

  • "这似乎不起作用" 有什么问题?请具体并复制粘贴编译器错误(如果有)。
  • 它不起作用,因为 "point U,L;"不是实例化具有一个模板参数的模板的有效方法。
  • 是您尝试解决line 无法从point 看到的问题的模板吗?
  • 是的,我试图用模板解决它

标签: c++ c++11 struct


【解决方案1】:

你不需要模板,你只需要一个前向声明。

struct line;  // this is a forward declaration

struct point{
    int x,y;
    line* ln;
};

// ...
a.ln = &seg1;

【讨论】:

  • 谢谢,没想到。
【解决方案2】:

您的代码无法编译,因为您在声明point 的实例时没有为模板参数T 指定类型,例如:

template<typename T>
struct point{
    int x,y;
    T* ln;
};

struct line{
    point<line> U,L; // <--
};

point<line> a; // <--
a.x = 1;
a.y = 1;

point<line> b; // <--
b.x = 0;
b.y = 0;
    
line seg1;
seg1.U = a;
seg1.L = b;
    
a.ln = &seg1;
b.ln = &seg1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多