Подтвердить что ты не робот

'cout не называет тип

Я изучал книгу Адама Дроздека "Структуры данных и алгоритмы в C++", ну, я набрал код на странице 15 в своем vim и скомпилировал его в терминале моего Ubuntu 11.10.

#include <iostream>
#include <cstring>
using namespace std;

struct Node{
    char *name;
    int age;
    Node(char *n = "", int a = 0){
        name = new char[strlen(n) + 1];
        strcpy(name, n);
        age = a;
    }
};

Node node1("Roger", 20), node2(node1);
cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age;
strcpy(node2.name, "Wendy");
node2.name = 30;
cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age;

Но есть некоторая ошибка:

[email protected]:~$ g++ unproper.cpp -o unproper
unproper.cpp:15:23: warning: deprecated conversion from string constant to ‘char* [-Wwrite-strings]
unproper.cpp:16:1: error: ‘cout does not name a type
unproper.cpp:17:7: error: expected constructor, destructor, or type conversion before ‘( token
unproper.cpp:18:1: error: ‘node2 does not name a type
unproper.cpp:19:1: error: ‘cout does not name a type

Я искал это, это, это и это, но я не могу найти ответ.

Любая помощь будет оценена :)

4b9b3361

Ответ 1

Проблема в том, что код, который у вас есть, делает печать вне любой функции. Заявления в C++ должны находиться внутри функции. Например:

#include <iostream>
#include <cstring>
using namespace std;

struct Node{
    char *name;
    int age;
    Node(char *n = "", int a = 0){
        name = new char[strlen(n) + 1];
        strcpy(name, n);
        age = a;
    }
};


int main() {
    Node node1("Roger", 20), node2(node1);
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age;
    strcpy(node2.name, "Wendy");
    node2.name = 30;
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age;
}

Ответ 2

У вас отсутствует объявление функции вокруг вашего программного кода. Следующее должно решить вашу ошибку:

#include <iostream>
#include <cstring>
using namespace std;

struct Node{
    char *name;
    int age;
    Node(char *n = "", int a = 0){
        name = new char[strlen(n) + 1];
        strcpy(name, n);
        age = a;
    }
};

int main()
{
    Node node1("Roger", 20), node2(node1);
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age;
    strcpy(node2.name, "Wendy");
    node2.name = 30;
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age;
}

Ошибка, которую вы затем получаете (что-то вроде "неверного преобразования из int в char *"), заключается в том, что вы пытаетесь установить целочисленное значение (30) на строковый атрибут (имя) с

node2.name=30;

я думаю

node2.age=30;

будет правильным.

Ответ 3

main() функция missed.There должна быть main() функция в C++, и вы должны положить cout в функцию.

Ответ 4

Если вы хотите использовать cout вне функции, вы можете сделать это, собирая значение, возвращаемое cout в boolean.see, приведенный ниже пример

#include<iostream>
using namespace std;

bool b=cout<<"1";

int main()
{

return 0;

}

вывод:

error prog.cpp:4:14: error: cannot convert 'std::basic_ostream<char>' to 'bool' in initialization
 bool b=cout<<"1";

Ответ 5

В том числе:

int main()
{ //code 
  return 0;
}

Вам поможет. Эта проблема обычно возникает у тех, кто учится в книге, в которой они обычно не используют основную функцию после нескольких глав.