2012-03-29 30 views
12

Tôi đang học cuốn sách “Cấu trúc dữ liệu và thuật toán trong C++” của Adam Drozdek, tôi đã gõ mã ở trang 15 trong vim của tôi và biên dịch nó trong terminal của Ubuntu 11.10.‘cout’ không có tên là

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

Nhưng có một số lỗi:

[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 

Tôi đã tìm kiếm this, this, thisthis, nhưng tôi không thể tìm thấy câu trả lời.

Bất kỳ trợ giúp nào sẽ được đánh giá cao :)

+5

Trường hợp 'main() 'ở đâu? – Makoto

+1

Bạn đang thiếu chính. Mã nằm ngoài một hàm và được trình biên dịch xem là khai báo biến, lớp, cấu trúc hoặc các lệnh khác. Chỉ cần đặt tất cả các mã dưới vào int main() –

Trả lời

23

Vấn đề là mã bạn đang in không nằm trong bất kỳ chức năng nào. Các câu lệnh trong C++ cần phải ở bên trong một hàm. Ví dụ:

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

Bạn đang thiếu tuyên bố chức năng xung quanh mã chương trình của mình. Sau đây nên giải quyết lỗi của bạn:

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

Các lỗi sau đó bạn nhận được (cái gì đó như "chuyển đổi không hợp lệ từ int để char *") là bởi vì bạn cố gắng thiết lập một giá trị số nguyên (30) vào một thuộc tính string (tên) với

node2.name=30; 

tôi nghĩ

node2.age=30; 

sẽ là chính xác.

2

main() chức năng là missed.There phải là một chức năng main() trong C++, và bạn nên đặt cout vào một hàm.

1

Nếu bạn muốn sử dụng cout ngoài chức năng bạn có thể làm điều đó bằng cách thu thập các giá trị được trả về bởi cout trong boolean.see ví dụ dưới đây

#include<iostream> 
using namespace std; 

bool b=cout<<"1"; 

int main() 
{ 

return 0; 

} 

đầu ra:

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

Bao gồm:

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

sẽ giúp bạn. Vấn đề này thường xảy ra với những người đang học từ cuốn sách mà họ thường không sử dụng chức năng chính sau một vài chương.