'cout'没有命名类型

时间:2012-03-29 23:24:56

标签: 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;

但是有一些错误:

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

我搜索了thisthisthisthis,但我找不到答案。

任何帮助将不胜感激:)

6 个答案:

答案 0 :(得分:24)

问题是您执行打印的代码不在任何功能范围内。 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;
}

答案 1 :(得分:5)

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

#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;

是正确的。

答案 2 :(得分:2)

错过了

main()函数。在C ++中应该有main()函数,你应该将cout放入函数中。

答案 3 :(得分:1)

如果你想在函数外部使用cout,可以通过在boolean中收集cout返回的值来实现。见下面的例子

#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";

答案 4 :(得分:0)

,包括:

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

会帮助你。这个问题通常发生在那些从书中学习的人,他们通常在几章之后不会使用主要功能。

答案 5 :(得分:-1)

对于类错误:您应该在类的任何方法中使用 cout。您不能在任何类中公开使用 cout。

class result:public exam{
public:

    display_result()
    {
    float percentage;
    percentage=(physics + maths) / 2;
    get_roll_number();
    getmarks();
    cout << "The Final Percentage of the Student is =" <<percentage<< "%" << endl;
    }
};