我想在名称空间范围内定义公共功能(而不是在类中-这有效)
基本上我想像例如使用它:

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/

10-11 22:38
查看更多