在C ++项目中使用Clang“使用未声明的标识符”错误

时间:2014-01-21 11:53:44

标签: c++ clang llvm undeclared-identifier flycheck

我在我的C ++项目中使用Clang作为语法检查程序。它是通过Emacs中的Flycheck调用的,我收到了一个恼人的use of undeclared identifier错误,下面的最小工作示例来说明问题:

在档案testnamepace.cpp中:

#include "testnamespace.hpp"

int main() {
    const unsigned DIM = 3;
    testnamespace::A<DIM> a;
    a.f();
    a.g();
    return 0;
}

在档案testnamespace.hpp中:

#ifndef testnamespace_h
#define testnamespace_h

#include <iostream>

namespace testnamespace {
    // My code uses lots of templates so this MWE uses a class template
    template <unsigned DIM> class A;
}

template <unsigned DIM>
class testnamespace::A{
public:
    static const unsigned dim = DIM;

    A() {std::cout << "A(): dim = " << dim << std::endl;}

    // in my case some functions are defined in a .hpp file...
    void f() {
        std::cout << "call f()" << std::endl;
    }

    // ...and others are defined in a .ipp file
    void g();
};

#include "testnamespace.ipp"
#endif

在档案testnamespace.ipp中:

template <unsigned DIM>
void testnamespace::A<DIM>::g() {
//   ^^^^^^^^^^^^^ this results in the following error:
//   testnamespace.ipp:2:6:error: use of undeclared identifier 'testnamespace' (c/c++-clang)
    std::cout << "g()" << std::endl;
}

由于代码使用g++ -Wall testnamespace.cpp -o testnamespace(gcc版本4.7.2)编译时没有警告,我想知道这是否是我的编码中的错误,或者它只是使用Clang的“功能”。

0 个答案:

没有答案