2011-12-31 89 views
2

我想在MS VS 2010下编译一个较旧的C代码。错误发生在结构声明和调用。在VS 2010编译C代码

宣言(编辑):

typedef struct tStr 
{ 
int nInt; 
int ***anPoint; 
}; 

用法:

struct tStr tStuff; 
tStuff.nInt = 0; 

函数声明(编辑:也许现在的工作):

int doStuff(struct tStr *sStuff, int nStuff); 

编译器抱怨不明身份的标识,缺(或;或{等等,它们都被归类为语法错误,我检查的语法应该是好的。所以我在我的最后...

我redid结构声明。但仍然是相同的错误:

error C2143: syntax error : missing ';' before 'type' 

好吧,回到旧的声明。但是,如果我尝试访问该结构变量在使用中,我得到一个错误:

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

片段看起来不错。你能提供一个完整的,但很小的例子来证明问题吗? – Lindydancer 2011-12-31 16:15:15

+1

请显示出现问题的短片段。另请注意,Visual Studio只包含一个C++编译器,因此您的代码将始终以C++编译,并且只支持C89标准中的那些C部分。 – Xeo 2011-12-31 16:16:56

+0

我们可以看到错误信息吗? – 2011-12-31 16:17:07

回答

0

除非你的typedef在C结构,用法应该是:

struct TStr tStuff; 
+0

问题已修复,并且因为答案而被编辑。这是之前打字过的。 – Xeo 2011-12-31 16:21:24

+2

您对typedef的使用是错误的。它没有声明任何类型。 – 2011-12-31 16:45:52

3

简短的回答是,你缺少的参数typedef(继续为全面解释)。

typedef的语法是:

的typedef 型清晰度标识符;

在您的示例中,类型定义是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; 
} 
+0

不,不起作用。还是像以前一样的错误。如果我试图通过别名声明它没有结构我得到:错误C2275:'tMatrix':非法使用这种类型作为表达式 – drjackill 2011-12-31 16:50:19

+0

我得到智能感知:不完整类型不允许 – drjackill 2011-12-31 17:20:24

+1

@drjackill:请注意,你不应该总是信任智能感知。如果某些代码更改使数据库失效并且IntelliSense尚未得到解决代码的问题,通常会出现问题。唯一可以信任的是实际编译代码并查看错误。 :) – Xeo 2011-12-31 18:29:17