如果我将#include <vector.h>
放入我的源文件中,我会收到此警告:
make -f Makefile CFG=Debug
g++ -c -g -o "Debug/mynn.o" "mynn.cpp"
In file included from C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/backward/vector.h:59,
from mynn.h:7,
from mynn.cpp:1:
**C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.**
g++ -g -o "Debug/mynn.exe" Debug/mynn.o
如果我只是添加常规#include <vector>
(没有.h,就像警告所示),我会收到以下错误:
make -f Makefile CFG=Debug
g++ -c -g -o "Debug/mynn.o" "mynn.cpp"
In file included from mynn.cpp:1:
**mynn.h:12: error: ISO C++ forbids declaration of `vector' with no type
mynn.h:12: error: expected `;' before '<' token
mynn.h:13: error: `vector' has not been declared
mynn.h:13: error: expected `,' or `...' before '<' token
mynn.h:13: error: ISO C++ forbids declaration of `parameter' with no type
mynn.h:20: error: ISO C++ forbids declaration of `vector' with no type
mynn.h:20: error: expected `;' before '<' token
mynn.h:21: error: ISO C++ forbids declaration of `vector' with no type
mynn.h:21: error: expected `;' before '<' token**
有没有更好的方法来包含矢量标头这样它不会抱怨?这是生成警告/错误的源文件:
// mynn.h
#ifndef _MYNN_H_
#define _MYNN_H_
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <vector>
class neuron {
public:
neuron();
vector<int> weights;
int compute_sum (vector <int> &input);
};
class layer
{
public:
layer();
vector <neuron> nrns;
vector<int> compute_layer (vector <int> &input);
};
#endif /*_MYNN_H_*/
答案 0 :(得分:30)
问题是vector<T>
存在于std
命名空间中,并且您尝试使用该类型而没有任何限定条件或适当的using
语句。最安全的解决方法是使用std
前缀明确限定类型的使用。
std::vector<neuron> nrns;
这也可以通过using
语句显式导入类型来修复。
using std::vector;
我会避免这种做法。在合法的情况下向头文件添加using
语句是不好的做法,因为它可以改变项目的编译方式。这种形式比std
的全面导入更安全,但仍然不是很好。
答案 1 :(得分:15)
vector
属于std
命名空间。您需要将其名称完全限定为std::vector<int>
。
我需要澄清一下,C ++标准允许您使用JaredPar在其答案中提供的所有选项,但我强烈建议不要使用using namespace std
,尤其是在头文件中。关于using namespace std
您可以在this问题中找到详细说明的意见。我个人同意,所以请允许我在答案中将其链接起来。
答案 2 :(得分:2)
实际上,
你需要指定std :: vector,因为vector不是全局的。
但我建议您不要使用using
关键字。
问题在于使用范围以及之后可能引发的冲突。 如果你计划拥有一个便携式应用程序(代码),(特别是对于库),你应该避免吝啬,因为你不能确定其他平台的副作用,对于未来的代码用户。< / p>