上下文信息不足以确定类型

时间:2012-12-22 05:51:24

标签: c++ compiler-errors c++03

我做过研究,根本无法理解这个信息。我发现的一切似乎都是编译器本身的错误。我还读过'不足的上下文信息以确定类型'不是有用的消息
我的问题:有没有人知道这个编译错误信息的含义?
我理解这个问题可能是特定于代码的。我的代码只是声明了一个全局匿名结构,然后一旦它试图在一个函数中访问它我得到这个错误(或者我已经评估过了)。
编辑:我得到了我的代码编译! - 但我仍然不知道错误意味着什么,所以我会把问题打开。
编辑:这是我的代码,据我认为很重要:

    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中的一个错误。

1 个答案:

答案 0 :(得分:2)

关于此代码,

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定义为数据成员而不是函数成员。

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

要签署“全局”,我只需使用我称之为g的命名空间。 : - )