簡體   English   中英

定義名稱空間作用域功能

[英]Define namespace scope function

我想在命名空間范圍內定義公共功能(而不是在類中-這可以工作)基本上,我想像例如使用它:

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名稱用於冥冥中早已錯誤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的標頭<time.h>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM