有人曾暗示不建议在头文件中执行此操作:
using namespace std;
Run Code Online (Sandbox Code Playgroud)
为什么不建议?
它是否会导致像这样的链接器错误:(为了方便而行换行)
error LNK2005: "public: __thiscall std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> >::
~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ)
already defined in tools.lib(Exception.obj)
Run Code Online (Sandbox Code Playgroud) 我有一个实现在c ++中打印出枚举值
如果我将所有代码放在.h文件中,一切都很顺利.如果我将函数实现分离到.cpp文件中,我会收到链接器错误.
这是我的主文件
#include <iostream>
#include <vector>
#include "Day.h"
using namespace std;
int main(){
initializeDayNames();
Day a = Clubs;
cout << a;
}
Run Code Online (Sandbox Code Playgroud)
这是.h文件
#ifndef __Day__
#define __Day__
#include <iostream>
#include <vector>
#include <string>
using namespace std;
enum Day {Clubs, Hearts, Diamonds, Spades} ;
vector<string> DayNames = vector<string>();
ostream & operator<<(ostream & out, Day cs);
void initializeDayNames();
#endif
Run Code Online (Sandbox Code Playgroud)
和.cpp文件
#include <iostream>
#include "Day.h"
#include<string>
#include<vector>
using namespace std;
void initializeDayNames(){
DayNames.push_back("Clubs");
DayNames.push_back("Hearts");
DayNames.push_back("Diamonds");
DayNames.push_back("Spades");
}
ostream & operator<<(ostream & …Run Code Online (Sandbox Code Playgroud) 这很奇怪.我在一个类中创建了一个矢量,但不能在另一个类中创建它.他是我所拥有的代表:
main.h
#include <Windows.h>
#include <ShellAPI.h>
#include <vector>
#include <string>
#include <iostream>
#include "taco.h"
class MyClass
{
public:
int someint;
vector<int> myOrder;
};
Run Code Online (Sandbox Code Playgroud)
taco.h
#include <vector>
class OtherClass
{
public:
vector<int> otherOrder;
};
Run Code Online (Sandbox Code Playgroud)
我得到关于taco.h中的向量声明的编译错误:
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?我可以取消注释第二个矢量声明,它编译得很好.
最近我注意到,如果我不在程序中包含“ using namespace std”,而仅使用“ std :: cout”或“ std :: endl”,那么我的程序仍然可以编译吗?因此,如果我使用'std ::'前缀,是否甚至需要包括'using namespace std'?“ std ::”前缀是否调用using名称空间std?如果有人可以帮我解决这个问题,将不胜感激。