我想在命名空间范围内定义公共函数(不在Class中 - 这可行) 基本上我想使用它,例如:
std::chrono::milliseconds(16)
我尝试了很多设置,但这是最近的设置:
#ifndef TIMEX_H
#define TIMEX_H
namespace timee{
int now(int z);
}
#endif
#include <chrono>
#include "TimeX.h"
using namespace timee;
int now(int z){return 4;}
#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:未解析的外部符号&#34; int __cdecl timee :: now(int)&#34; (?now @ timee @@ YAHH @ Z)在函数_SDL_main
中引用
这有什么问题?这令人困惑。为什么链接器告诉我_SDL_main
引用了这个?我使用SDL库,但它与我的功能有什么关系?
另外还有一个问题(如果不容易回答我会开始新话题)。我使用timee
作为名称空间名称,因为我已经错误地告诉time
名称已在某处使用Error C2757。我猜它可能嵌套在某个地方。如何找出它的使用位置,是否可以使用该名称?我无法想象编译器在弄清楚我想要使用什么时遇到问题。
答案 0 :(得分:1)
您必须定义类似
的功能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
。