这是我的代码中的一部分,这给我带来了很多麻烦:
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));
…
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误:
error C2275: 'RandomPermutationIterator' : illegal use of this type as an expression.
error C2065: 'its' : undeclared identifier.
有人可以向我解释并告诉我我做错了什么吗?
从错误消息编号判断,您使用MS Visual C++作为C编译器.它支持C89,而不支持C99或C11.您无法在可执行语句之后定义变量(与C++或C99或更高版本不同).
在你的outline函数中,srand()调用是一个可执行语句; 之后你不能声明变量.
"明显的"修复是将调用移到srand()变量定义之后.但是,正确的解决方法是删除srand(time(NULL));呼叫 - 您应该(通常)只srand()在给定进程中调用一次.
顺便提一下,以下划线和另一个下划线或大写字母开头的标识符保留供实现使用.这意味着你应该不是自己使用它们.只需删除前导下划线; typedef名称和标记名称位于不同的名称空间中,因此您可以很好地使用:
typedef struct RandomPermutationIterator RandomPermutationIterator;
Run Code Online (Sandbox Code Playgroud)