我的问题可能很愚蠢,但我不能通过命名空间共享一个值。
namespace AceEngine
{
namespace Graphics
{
namespace Interface
{
void drawDebugScreen()
{
// I want to access AceEngine::System::Version from here.
}
}
}
namespace System
{
string Version("DEBUG");
}
}
如何访问此字符串?
编辑:
ae.cpp
#include "stdafx.h"
#include "sha256.h"
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::getline;
using std::string;
namespace AceEngine
{
namespace Graphics
{
namespace Interface
{
void drawDebugScreen()
{
cout << "Version: " << AceEngine::System::Version << endl;
}
class Window{};
}
}
namespace System
{
class User{};
void pause(){cin.get();}
extern string Version("DEBUG");
}
}
ae.h
#pragma once
#include "stdafx.h"
#include <string>
using std::string;
namespace AceEngine
{
namespace Graphics
{
namespace Interface
{
void drawDebugScreen();
class Window{};
}
}
namespace System
{
class User{};
void pause();
extern string Version;
}
}
我删除了无用的部分(我留下了一些类来显示命名空间中的内容并且没有用处)
答案 0 :(得分:1)
与往常一样,名称需要在使用前声明。
您可能希望在标头中声明它,因此可以在任何源文件中使用它。在声明全局变量时需要extern
:
namespace AceEngine {
namespace System {
extern string Version;
}
}
或者,如果您只需要在此文件中使用它,您可以将System
命名空间移动到任何需要它之前。
更新:现在您已发布完整代码,问题是源文件不包含标题。
答案 1 :(得分:0)
必须在其使用点之前放置字符串的声明。
#include <iostream> // for std::cout
namespace AceEngine
{
namespace System
{
string Version("DEBUG"); // declare it here
}
namespace Graphics
{
namespace Interface
{
void drawDebugScreen() // access it in here
{
std::cout << AceEngine::System::Version << '\n;
}
}
}
}
int main()
{
AceEngine::Graphics::Interface::drawDebugScreen();
return 0;
}
如果你需要那么多嵌套命名空间,你可能会过度思考你的设计。但这是另一个故事。