1

当我使用常量nVar而不是数字时,出现以下错误。

常量.h:

extern const unsigned int nVar;

常量.cpp:

#include "constants.h"
const unsigned int nVar = 5;

主文件

#pragma once
#include "constants.h"
void foo(const double q[nVar])
{
    // ...
}

编译器:

数组常量在 ']' 标记之前不是整数常量

在 ',' 标记之前预期 ')'

'const'之前的预期不合格ID

4

2 回答 2

5

我认为这是因为编译器应该在编译时知道数组的大小,但是在你的示例中,由于 extern,nVar 的值只有在链接时才知道

于 2013-05-31T21:33:48.783 回答
1

首先,在我们的示例中,您没有使用常量“初始化”数组。您正在指定数组的大小。请注意,在给定的示例中,无论如何都将忽略数组大小。您的声明

void foo(const double q[nVar])

实际上相当于

void foo(const double q[])

void foo(const double *q)

其次,为了使整型常量在常量表达式中可用,它必须用初始化器声明。在您main.cpp的常量中声明时没有初始化器,这意味着它不能形成常量表达式,也不能在数组声明器中使用。

除非您确实需要具有外部链接的 const 对象,否则声明常量的正确方法是

const unsigned int nVar = 5;

就在头文件中。注意:不extern,初始化器在头文件中指定。constants.cpp在这种情况下,必须删除 in 中的定义。从技术上讲,这将在每个翻译单元中创建一个具有内部链接的独立nVar对象,但它通常不会占用任何内存,除非用作左值。

于 2013-05-31T22:33:39.263 回答