компиляция кода C под VS 2010 - PullRequest
2 голосов
/ 31 декабря 2011

Я пытаюсь скомпилировать старый код C под MS VS 2010. Ошибка возникает при объявлении структуры и вызове.

Декларация (редактировать):

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

Использование:

struct tStr tStuff;
tStuff.nInt = 0;

Объявление функции (правка: возможно, теперь работает):

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

Компилятор жалуется на то, что неопознанные идентификаторы отсутствуют (или; или {и т. Д. Все они классифицируются как синтаксические ошибки. То, что я проверил, синтаксис должен быть в порядке. Так что я нахожусь на своем конце ...

Я переделал объявление структуры. И все же та же ошибка:

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 ]

3 голосов
/ 31 декабря 2011

Короткий ответ: вам не хватает параметра для 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 голосов
/ 31 декабря 2011

Используете ли вы аргумент командной строки / Tc в файле проекта?http://msdn.microsoft.com/en-us/library/032xwy55.aspx

0 голосов
/ 31 декабря 2011

Если вы не вводите определение структуры в C, использование должно быть:

struct TStr tStuff;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...