我正在尝试创建静态常量,它将在不同的类中命名相同,并且可以从其他类访问
我正在尝试从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'
有什么问题? 感谢。
答案 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;
}
注意:
static
和const
,并且应该在.h
文件中constexpr
,应该在.cpp