访问类

时间:2015-08-05 12:36:26

标签: c++

我正在尝试创建静态常量,它将在不同的类中命名相同,并且可以从其他类访问

我正在尝试从B::num

等其他类访问常量

我的代码:

  

的main.cpp

...
Ptr ptr;
A *a = C::make(ptr);
  

A.H

class A { //pure virtual
public:
 virtual void func()=0;
 virtual void func2()=0;
protected:
 Ptr ptr;
}
  

B.h

class B : public A {
 public:
  B();
  static unsigned char const num[2];
 ...
}
  

B.cpp

#include "B.h"
constexpr unsigned char B::num[]={0x4,0x5};
B::B(){..}
  

C.h

#include "A.h"
#include "B.h"
class C {
public: 
 static A* make(const Ptr &);
}
  

C.cpp

A *C::make(const Ptr &ptr){
    if(!memcmp(ptr.memory,B::num,sizeof(B::num))){
     ...
    }
}

错误

B.h档案 - error: from previous declaration 'B::num'

B.cpp文件 - error: redeclaration B::num differs in 'constexpr'

有什么问题? 感谢。

2 个答案:

答案 0 :(得分:0)

第一个问题:您定义了一个不相关的全局a。您尝试定义的那个是在类中定义的。

static constexpr unsigned char class1::a[2] = {0x4,0x5};
//                             ^^^^^^^^

第二个问题:定义属于.cpp文件,而不是标题。

答案 1 :(得分:0)

以下是两个类中的静态const a的示例:

#include <iostream>

class class1 {
public:
    static unsigned char const a[2];
};

class class2 {
public:
    static unsigned char const a[2];
};

constexpr unsigned char class1::a[] = {0x4,0x5};
constexpr unsigned char class2::a[] = {0x4,0x5};

int main() {
    std::cout << static_cast<unsigned>(class1::a[0])
        << static_cast<unsigned>(class2::a[1]) << std::endl;
    return 0;
}

注意:

  • 声明包含staticconst,并且应该在.h文件中
  • 定义 constain constexpr,应该在.cpp