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