'cout'没有命名类型

pvd*_*pvd 17 c++

我正在学习Adam Drozdek的书"C++中的数据结构和算法",好吧,我在我的vim中输入了第15页的代码,并在我的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;
Run Code Online (Sandbox Code Playgroud)

但是有一些错误:

oo@oo:~$ 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
Run Code Online (Sandbox Code Playgroud)

我搜索了这个,这个,这个这个,但我找不到答案.

任何帮助,将不胜感激:)

tem*_*def 27

问题是您执行打印的代码不在任何功能范围内.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;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是更一般规则的一部分,即只有声明语句才能出现在 C++ 函数之外。我不知道这是否有深刻的哲学原因,或者它是否是一个历史文物。 (2认同)

Hei*_*nzi 6

您缺少程序代码周围的函数声明.以下应解决您的错误:

#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;
}
Run Code Online (Sandbox Code Playgroud)

您获得的错误(类似"从int到char*的无效转换")是因为您尝试将整数值(30)设置为字符串属性(名称)

node2.name=30;
Run Code Online (Sandbox Code Playgroud)

我认为

node2.age=30;
Run Code Online (Sandbox Code Playgroud)

会是对的.