1

我已经完成了研究,但我根本无法理解这条信息。我发现的一切似乎都是编译器本身的错误。我还在某处读到“上下文信息不足,无法确定类型”不是有用的信息
我的问题:是否有人知道此编译错误消息的含义?
我知道这个问题可能是特定于代码的。我的代码仅声明了一个全局匿名结构,然后一旦它尝试在函数中访问它,我就会收到此错误(或者我已经对其进行了评估)。
编辑:我得到了我的代码来编译!- 但我仍然不知道错误是什么意思,所以我会留下这个问题。
编辑:这是我的代码,据我认为很重要:

    typedef ofstream::pos_type ofilepos;
    struct stack  // stack is my own stack data-structure
    {
      // ...
      // int L; struct N *l;
      stack(): L(0), l(NULL) {}
    }

    // ...

    struct
    {
      const char* zero;
      stack<ofilepos> chunks; // it was 'chunks();' with (), and it didn't work
    } _fileext = {"\0\0\0"};

    // ...

    ofstream& write_stack_pushsize(ofstream& f)
    {
      _fileext.chunks.push(new ofilepos(f.tellp()));
      f.write(_fileext.zero,4);
      return f;
    }

我认为这可能是因为我在结构声明中调用了一个构造函数,而不是稍后......或者其他什么......这可能是 C++03 中的一个错误。

4

1 回答 1

3

关于这段代码,

struct
{
  const char* zero;
  stack<ofilepos> chunks();
} _fileext = {"\0\0\0"};

没有办法chunks在匿名结构定义之后提供成员函数的定义。

还考虑以下使用示例,

ofstream& write_stack_pushsize(ofstream& f)
{
  _fileext.chunks.push(new ofilepos(f.tellp()));
  f.write(_fileext.zero,4);
  return f;
}

显然您的意思是定义chunks为数据成员而不是函数成员。

顺便说一句,在名称开头使用下划线可能会与标准库实现中的名称冲突。例如,这些名称保留在全局命名空间中(如果我没记错的话)。通常的约定是在名称末尾加上下划线,以表示“成员”。

为了表示“全局”,我只需使用我称之为的命名空间g。:-)

于 2012-12-22T06:14:19.707 回答