'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
Я искал это, это, это и это, но я не могу найти ответ.
Любая помощь будет оценена :)
Ответы
Ответ 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;
}
Вам поможет. Эта проблема обычно возникает у тех, кто учится в книге, в которой они обычно не используют основную функцию после нескольких глав.