我正在尝试在MS VS 2010下编译旧的C代码。结构声明和调用时会出错。
声明(编辑):
typedef struct tStr
{
int nInt;
int ***anPoint;
};
用法:
struct tStr tStuff;
tStuff.nInt = 0;
功能声明(编辑:现在可能有效):
int doStuff(struct tStr *sStuff, int nStuff);
编译器抱怨未识别的标识符,缺少(或;或{等等。它们都被归类为语法错误。我检查语法应该没问题。所以我就在我的最后......
我重新编写了struct声明。但仍然是同样的错误:
error C2143: syntax error : missing ';' before 'type'
好的,回到旧声明。但是如果我尝试在使用中访问struct变量,我会收到一个错误:
error C2065: 'tStuff' : undeclared identifier
所以我的实时代码是:
typedef struct tMatrix
{
int nRows;
int nCols;
int nVec;
int ***anMatrix;
};
int allocateMatrix(struct tMatrix *sMatrix, int nType);
struct tMatrix sMatrix1;
sMatrix1.nRows = 0;
错误:
error C2143: syntax error : missing ';' before 'type'
error C2065: 'sMatrix1' : undeclared identifier
有什么想法吗?
编辑:谢谢你的所有答案,我想我只会重写它。我还有很多其他关于类型转换的错误,所以...为了避免头疼,我会重新开始。再次感谢。答案 0 :(得分:3)
简短的回答是您错过了typedef
的参数(继续进行完整说明)。
typedef
的语法是:
typedef type-definition 标识符;
在您的示例中,类型定义是struct tStr
,标识符丢失。
如果要从结构中创建新的类型定义,可以将其声明为:
typedef struct tStr_ {
int nInt;
int ***anPoint;
} tStr;
现在,您可以在代码中引用新类型tStr
:
tStr tStuff;
tStuff.nInt = 0;
在此示例中,tStr_
是结构的名称,tStr
是新类型的名称。您仍然可以通过其名称引用结构:
struct tStr_ tStuff;
tStuff.nInt = 0;
编辑:也许我们需要一个更完整的例子来说明你想要完成的事情。以下代码示例编译时没有错误并产生预期结果:
#include <stdio.h>
#include <stdlib.h>
typedef struct tMatrix_ {
int nRows;
int nCols;
int nVec;
int ***anMatrix;
} tMatrix;
int allocateMatrix(tMatrix *sMatrix, int nType)
{
sMatrix->nRows = 10;
return 0;
}
int main(void)
{
tMatrix sMatrix1;
allocateMatrix(&sMatrix1, 0);
printf("%d\n", sMatrix1.nRows);
return EXIT_SUCCESS;
}
答案 1 :(得分:0)
除非你在C中输入一个结构,否则用法应为:
struct TStr tStuff;
答案 2 :(得分:0)
您是否在项目文件中使用/ Tc命令行参数? http://msdn.microsoft.com/en-us/library/032xwy55.aspx