我的C ++代码在没有任何名称空间限定的情况下使用endl
,vector
,complex
和cout
偶尔。使用GCC 4.9进行编译时,我会收到类似这样的错误:
bfm.h:454:4: error: 'complex' does not name a type
complex<double> inner(Fermion_t x,Fermion_t y);
^
在同一个文件中,有一行std::
限定符:
std::complex<Float> dot(Fermion_t x_t, Fermion_t y_t,int sx,int sy);
在整个代码库中,我看到了以下使用的模板专业化
std::complex<double>
std::complex<cFloat>
complex<Float>
complex<double>
complex<T>
complex<S>
。对于常规快递struct\s+complex
和class\s+complex
都没有设法在代码库或基础库的代码库中找到一些东西。因此我假设它确实是标准库复杂类型。
在各种标头文件中分散了几个using namespace std
,但并非所有文件都散布在其中。
我尝试用GCC 4.9和Clang 3.7编译这个代码库。两者都给出了关于缺失类型的类似错误。是否有可能这与旧版GCC一起使用?我试图在所有需要的位置插入std::
,但如果我不能编译适用于此类计算机的源检出,我会觉得我做错了。
答案 0 :(得分:1)
您可以使用有选择性的using...
declarations或type aliasing来仅引入您需要的std::
成员。像:
using std::complex;
using std::cout;
using std::endl;
cout << "Hello world" << endl; // works
complex<float> x; // works
fstream y; // compile error, no namespace qualification, no using declaration
std::fstream z; // OK
啊,是的,也许不那么明显,所以也许值得一提。你现在std::endl
?嗯,它是一个流操纵器,实际上是一个功能。
这意味着也可以从其他名称空间引入当前的块 function 成员。
像:
#include <cmath>
#include <cstdlib>
inline void dummy(float x) {
float y=fabs(x); // Na'a.., fabs is imported into std namespace by <cmath>
using std::itoa; // same is itoa, but we'll be using it
char buff[128];
itoa(42, buff, 10); // OK
}