我有一个“ source.h”。
class A{
protected :
static const uint8_t test = 10;
private:
char buf[test];
}
效果很好。
然后我需要为其添加一个gtest。我有一个“ source.g.cpp”:
#include <source.h>
class Afixture: public ::testing::Test, public A{}
TEST_F(AFixture, test){
ASSERT_EQ(10, test)
}
[我有一些错误,例如“ [提示:必须在程序中定义静态成员测试]”。因此,我在“ source.h”中声明了“ test”。
class A{
protected :
static const uint8_t test;
private:
char buf[test];
}
以及“ source.cpp”中。
#include <source.h>
const uint8_t A::test = 10;
source.g.cpp保持不变。但是这次我得到“数组下标运算符中需要一个整数常量表达式”。在“ source.h”的这一行中
char buf[test];
我的理解是,如果我有一个
char buf[sth]
,则此“ sth”必须是const int而不是变量,因此编译器将知道在编译时应分配多少内存。我该如何解决?谢谢!
我有一个“ source.h”。 A级{保护:静态const uint8_t测试= 10;私人:char buf [test]; }效果很好。然后我需要为其添加一个gtest。我有一个“ source.g.cpp”:...
'sth'必须是编译时常量,而不仅仅是“ const int”。在第一个示例中,直接在= 10
的声明中定义test
,编译器在解析test
时便知道char buf[test];
(10)的确切值,并且一切都很好。但是在您的第二个示例中,其中= 10
被移到.cpp
文件中,编译器在解析test
时不再知道char buf[test];
的值,因此出现错误。
@ Remy Lebeau根据https://stackoverflow.com/questions/272900/undefined-reference-to-static-class-member
,在第一个示例中没有完全声明>