我正在努力完成我在C ++中的第一步。已经问过this问题,但没有得到关于命名空间的完整答案。
我做了以下事情。
Source.cpp
#include <iostream>
using namespace std;
int PrintHello();
extern int tempCount;
void main()
{
int i;
PrintHello();
cout << tempCount << endl;
cout << "Hello from main" << endl;
}
PrintFunc.cpp
#include <iostream>
using namespace std;
int tempCount = 111;
int PrintHello()
{
cout << "Hello from Source1" << endl;
return 0;
}
这是完美的编译。 现在我正在学习命名空间,所以我只是尝试将第二个文件的内容放在命名空间中,如下所示。
PrintFunc.cpp(已修改)
#include <iostream>
using namespace std;
namespace MyNameSpace
{
int tempCount = 111;
int PrintHello()
{
cout << "Hello from Source1" << endl;
return 0;
}
}
现在我修改了Source.cpp,以反映前面片段中的命名空间介绍。
#include <iostream>
using namespace std;
int MyNameSpace::PrintHello();
extern int MyNameSpace::tempCount;
void main()
{
int i;
PrintHello();
cout << tempCount << endl;
cout << "Hello from main" << endl;
}
这根本就不能编译。有人可以请你纠正我。我的目标是在c ++中理解命名空间概念。我也有很好的exp用C#。
答案 0 :(得分:5)
编译MYSpace
时编译器不了解命名空间Source.cpp
的问题。
#include <iostream>
using namespace std;
namespace MyNameSpace
{
int PrintHello();
extern int tempCount;
}
int main()
{
int i;
MyNameSpace::PrintHello();
cout << MyNameSpace::tempCount << endl;
cout << "Hello from main" << endl;
}
但此示例为useless
。它的工作原理只是因为您只有一个消费者.cpp
。
您应该使用.h
文件,然后在PrintFunc.h
和任何其他Source.cpp
中包含.cpp
文件,以便使用该功能。
我会写一个例子:
Print.h
#pragma once
namespace MyNameSpace
{
int PrintHello();
extern int tempCount;
}
请注意,我们在此处不使用其他includes
和using namespace
。我们仅使用includes
来使用functions
interfaces
中的某些类。
using namespace
可以&#34;破坏&#34;消费者.cpp
或.h
。
Print.cpp
#include <iostream>
#include "Print.h"
using namespace std;
int MyNameSpace::tempCount = 111;
int MyNameSpace::PrintHello()
{
cout << "Hello from Source1" << endl;
return 0;
}
在这里,我们可以设置任何include
,它不会触及任何其他文件。
消费者.cpp
:
#include <iostream>
#include "Print.h"
using namespace std;
int main()
{
int i;
MyNameSpace::PrintHello();
cout << MyNameSpace::tempCount << endl;
cout << "Hello from main" << endl;
}
VS特定:#pragma once
,对于VS,您必须在#include "stdafx.h"
的第一行.cpp
答案 1 :(得分:3)
使用其成员时必须提供命名空间名称。或者使用using namespace
指令。
void main()
{
int i;
MyNameSpace::PrintHello();
cout << MyNameSpace::tempCount << endl;
cout << "Hello from main" << endl;
}
但是,要使其工作,名称空间应在单独的.h
文件中声明,并且应包含在source.cpp
答案 2 :(得分:0)
所以最后,我已根据Dmitriy Zapevalov回答确定了问题。
First Print.h
#pragma once
namespace MyNameSpace
{
int PrintHello();
extern int tempCount;
}
下一个PrintFunc.cpp
#include <iostream>
#include "Print.h"
using namespace std;
namespace MyNameSpace
{
int tempCount = 111;
int PrintHello()
{
cout << "Hello from Source1" << endl;
return 0;
}
}
PrintFunc.cpp也可以像这样替代。
PrintFunc.cpp(替代)
#include <iostream>
#include "Print.h"
using namespace std;
int MyNameSpace::tempCount = 111;
int MyNameSpace::PrintHello()
{
cout << "Hello from Source1" << endl;
return 0;
}
最后是Source.cpp
#include <iostream>
#include "Print.h"
using namespace std;
using namespace MyNameSpace;
void main()
{
PrintHello();
cout << tempCount << endl;
cout << "Hello from main" << endl;
}
Source.cpp也可以像这样替代。
Source.cpp(替代)
#include <iostream>
#include "Print.h"
using namespace std;
void main()
{
MyNameSpace::PrintHello();
cout << MyNameSpace::tempCount << endl;
cout << "Hello from main" << endl;
}