这是我的代码中给我带来很多麻烦的部分:
struct _RandomPermutationIterator
{
size_t n, *arrp;
size_t i;
};
typedef struct _RandomPermutationIterator RandomPermutationIterator;
RandomPermutationIterator *RandomPermutationIterator_alloc(size_t n)
{
srand(time(NULL));
RandomPermutationIterator *its = (RandomPermutationIterator*)malloc(sizeof(RandomPermutationIterator));
…
}
我收到的错误:
error C2275:“RandomPermutationIterator”:非法使用此类型作为表达式。
错误 C2065:“其”:未声明的标识符。
谁能给我解释一下并告诉我哪里做错了?
最佳答案
从错误消息编号来看,您正在使用 MS Visual C++ 作为 C 编译器。它支持 C89,而不是 C99 或 C11。您不能在可执行语句之后定义变量(与 C++ 或 C99 或更高版本不同)。
在您的大纲函数中,srand()
调用是一个可执行语句;你不能在那之后声明变量。
“明显”的修复是在变量定义之后将调用移至 srand()
。但是,正确的解决方法是删除 srand(time(NULL));
调用——您应该(通常)只在给定进程中调用一次 srand()
。
顺便说一句,以下划线和另一个下划线或大写字母开头的标识符保留供实现使用。这意味着您不应该自己使用它们。只需删除前导下划线; typedef 名称和标签名称位于不同的命名空间中,因此您可以很好地使用:
typedef struct RandomPermutationIterator RandomPermutationIterator;
关于c - 为什么在可执行语句后声明变量不适用于 MS C 编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23936604/