Почему структуры не работают в Xcode, когда они работают в Visual C ++? Нужна помощь! - PullRequest
3 голосов
/ 22 октября 2009

По какой-то причине этот самый базовый код компилируется без ошибок в Visual C ++, но выдает ошибки в XCode. Мне нужно знать почему, чтобы продолжить работу в Xcode для моего класса Computer Science.

#include <iostream>
#include <string>

using namespace std;

struct acct {        // bank account data
    int     num;      // account number
    string name;      // owner of account
    float   balance; // balance in account
};

int main() {

    acct account;

    cout << "Enter new account data: " << endl;
    cout << "Account number: ";
    cin  >> account.num;
    cout << "Account name: ";
    cin  >> account.name;
    cout << "Account balance: ";
    cin  >> account.balance;

    return 0;

}

Это дает две ошибки, одна говорит, что ожидала ';' перед учетной записью (после объявления main), а во-вторых, эта учетная запись не была объявлена ​​для cin >> account.num;

Ответы [ 3 ]

13 голосов
/ 22 октября 2009

Проблема на самом деле не в вашем коде: в то время как C требует от вас префикса struct, в этом случае C ++ этого не делает. Проблема в том, что в Unix есть глобальная функция с именем acct - именно this сбивает с толку компилятор. Если вы переименовали свою структуру во что-то другое, скажем, bank_account, она будет вести себя так, как вы ожидали.

1 голос
/ 22 октября 2009

Если вы измените «acct account»; в основном "struct acct account"; это должно скомпилироваться. Вы на самом деле не объявили новый typedef "acct" в своем коде, но Visual C ++ делает это за вас как нестандартное расширение. XCode более строгий.

Альтернативное исправление - сделать "typedef struct acct {...} acct;" который объявит структуру acct и создаст новый typedef.

0 голосов
/ 23 октября 2009

Я столкнулся с подобными проблемами, пытаясь использовать переменную с именем "log".

Если вы хотите сохранить имя своей структуры, попробуйте указать только те элементы, которые вы хотите использовать:

using std::cin;
using std::cout;
using std::endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...