数组下标运算符中需要一个整数常量表达式

问题描述 投票:0回答:2

我有一个“ 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”:...

c++ static googletest
2个回答
0
投票

'sth'必须是编译时常量,而不仅仅是“ const int”。在第一个示例中,直接在= 10的声明中定义test,编译器在解析test时便知道char buf[test];(10)的确切值,并且一切都很好。但是在您的第二个示例中,其中= 10被移到.cpp文件中,编译器在解析test时不再知道char buf[test];的值,因此出现错误。


0
投票

@ Remy Lebeau根据https://stackoverflow.com/questions/272900/undefined-reference-to-static-class-member,在第一个示例中没有完全声明>

© www.soinside.com 2019 - 2024. All rights reserved.