关于GNU-CPP错误提示“类型不明确”的解决方案 木灵的炼金工作室

今天在写项目时发现了“类型不明确”的错误(XXX is ambiguous)
这个错误一般情况下是产生于同时using了两个不同的命名空间,而这两个命名空间下存在同名的变量,就会出现不明确的错误。

但在更多的时候,这样的错误有可能是由于其他的一些错误导致的。比如:
将如下的代码段加入程序中,会使得整个程序的std::string出现上述问题。
这个问题是由构造函数定义中错误的explicit关键字引入的,它可能引发文法分析器出现二义性,从而返回了一个异常的错误信息。

class lexer{
...
public:
    explicit lexer(std::string& fileName);
}

explicit lexer::lexer(std::string& fileName) 
    : _infile(fileName) {
    for (int i = 0; i < __reserved.size(); i++)
        _idTable[__reserved[i]] = re(i);
}

如果改为:

class lexer{
...
public:
    explicit lexer(std::string& fileName);
}

lexer::lexer(std::string& fileName) 
    : _infile(fileName) {
    for (int i = 0; i < __reserved.size(); i++)
        _idTable[__reserved[i]] = re(i);
}

则一切正常。

故报类型不明确的错误时可以查一下其他的问题。


Copyright AmachiInori 2017-2021. All Right Reserved.
Powered By Jekyll.
amachi.com.cn