我想在名称空间范围内定义公共功能(而不是在类中-这有效)
基本上我想像例如使用它:
std::chrono::milliseconds(16)
我已经尝试了许多设置,但这是最近的设置:
时间X.h
#ifndef TIMEX_H
#define TIMEX_H
namespace timee{
int now(int z);
}
#endif
TimeX.cpp
#include <chrono>
#include "TimeX.h"
using namespace timee;
int now(int z){return 4;}
Main.cpp
#include <iostream>
#include "TimeX.h"
using namespace timee;
int main(int argc, char** argv){
long c = now(2);
std::cout << "c" << c <<std::endl;
return 0;
}
这给了我以下错误:
Main.obj:错误LNK2019:函数_SDL_main中引用的未解析的外部符号“ int __cdecl timee :: now(int)”(?now @ timee @@ YAHH @ Z)
这是什么问题?令人困惑。为什么链接器告诉我在
_SDL_main
中引用了它?我使用SDL库,但它与我的功能有什么关系?与该代码有关的第二个问题。
还有一个额外的问题(如果不容易回答,我将开始新的话题)。我使用
timee
作为名称空间名称,因为我在告诉time
名称已经在Error C2757某个地方使用时出错。我想它可能嵌套在某个地方。我如何找出使用该名称的地方,以及无论如何都可以使用该名称?我无法想象编译器在确定我要使用的内容时会遇到问题。 最佳答案
您必须定义类似的功能
int timee::now(int z){return 4;}
或者你可以这样写
#include <chrono>
#include "TimeX.h"
namespace timee
{
int now(int z){return 4;}
}
否则,在cpp模块中,将在全局名称空间中声明(并定义)另一个具有相同名称的函数
#include <chrono>
#include "TimeX.h"
using namespace timee;
int now(int z){return 4;}
那就是这两个定义
int timee::now(int z){return 4;}
int now(int z){return 4;}
定义不同的功能。第一个在全局命名空间中声明(并定义)命名空间
timee
中的函数,第二个在全局命名空间中声明(并定义)另一个具有相同名称的函数。至于名称
time
,则它在全局名称空间中定义,并对应于C标准函数time
。例如,标头<chrono>
可以依次包含标有名称<time.h>
的标头time
。关于c++ - 定义 namespace 作用域功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42775131/