簡體   English   中英

C ++命名空間和類

[英]C++ Namespaces and Classes

我想使用類中的常量而不調用該類,只需調用該常量即可,如下所示:

頭文件(.h)

class myClass{

   public: 
      const static char CHAR_S = '<';
}

源文件(.cpp)

using namespace myClass;
char separator = CHAR_S; //I want to call the constant without using the class (myClass::CHAR_S)

我怎樣才能做到這一點?

最小的完整示例:

class MyClass {
    public:
    static const char CHAR_S = '<';
};

int main() {
    using namespace MyClass;
    char separator = CHAR_S;
    return 0;
}

導致以下編譯器錯誤:

main.cpp: In function 'int main()':
main.cpp:7:21: error: 'MyClass' is not a namespace-name
     using namespace MyClass;
                     ^
main.cpp:7:28: error: expected namespace-name before ';' token
     using namespace MyClass;
                            ^
main.cpp:8:22: error: 'CHAR_S' was not declared in this scope
     char separator = CHAR_S;
                      ^
main.cpp:8:10: warning: unused variable 'separator' [-Wunused-variable]
     char separator = CHAR_S;
          ^

myClass不是名稱空間,您不能那樣使用它。 我想你想要這樣的東西:

namespace constants{
    const static char CHAR_S = '<';
};

using constants::CHAR_S;
int main(int argc, char ** argv)
{
    char a = CHAR_S;
    return 0;
}

類不是名稱空間。 如果不通過類名限定CHAR_S,則不能引用它。

要執行所需的操作,只需將靜態變量放在名稱空間中:

namespace MyClass {
    static const char CHAR_S = '<';
} // namespace MyClass

int main() {
    using namespace MyClass;
    char separator = CHAR_S;
    return 0;
}

實時示例: http//coliru.stacked-crooked.com/a/74fcfee559cc1390

顯然,調用您的名稱空間MyClass會引起誤解(因為它不是類),因此請選擇一個更好的名稱。

根據C ++標准(3.3.7類范圍)

2班級成員的姓名只能按以下方式使用

—在其類別的范圍內(如上所述)或從其類別派生的類別(第10條),

- 之后 。 運算符應用於其類類型(5.2.5)或從其類派生的類的表達式,

—在->運算符應用於指向其類(5.2.5)或從其類派生的類的對象的指針之后,

—將::范圍解析運算符(5.1)應用於其類的名稱或從其類派生的類之后。

因此,我認為唯一的方法是引入另一個變量,該變量將引用類數據成員或具有其值。 例如

#include <iostream>

struct A
{
    const static char CHAR_S = '<';
};

const char A::CHAR_S;
const char &CHAR_S = A::CHAR_S;

int main()
{
    std::cout << CHAR_S << std::endl;
}    

簡單的把戲; 用參考重新定義它。 這是一個例子。

標頭

#ifndef __HEADER__
#define __HEADER__

class MyClass
{
public:
    const static char CHAR_S = '<';
    MyClass();
    ~MyClass();
};

#endif

類.cpp

#include "MyClass.h"
const static char &CHAR_S = MyClass::CHAR_S;

MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}

暫無
暫無

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

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