在VS 2010下编译C代码

时间:2011-12-31 16:10:33

标签: c++ c visual-studio-2010 structure

我正在尝试在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

有什么想法吗?

编辑:谢谢你的所有答案,我想我只会重写它。我还有很多其他关于类型转换的错误,所以...为了避免头疼,我会重新开始。再次感谢。

3 个答案:

答案 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