2012-03-29 9 views
12

私はAdam Drozdekの著書「C++でのデータ構造とアルゴリズム」を学んでいましたが、私はvimの15ページにコードを入力し、私のUbuntu 11.10のターミナルでコンパイルしました。'cout'は型名を指定していません

#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 

私はthisthisthisthisを検索しましたが、私は答えを見つけることができません。

任意の助けいただければ幸い:)

+5

'main()'はどこですか? – Makoto

+1

あなたのメインが不足しています。コードは関数の外にあり、変数、クラス、構造体または他のそのようなコマンドの宣言であるとコンパイラによって考慮されます。一番下のコードをすべてint main()に入れてください。 –

答えて

23

問題は、あなたはそれが印刷を行う必要があり、コードは、任意の関数の外にあるということです。 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; 
} 
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; 
} 

あなたは整数値(30)を設定しようとするので、あなたがして(「のchar *にint型から無効な変換」のようなもの)を取得エラーがある文字列属性に(名前)

node2.name=30; 

と私は

node2.age=30; 

が正しいことだと思います。

2

main()関数がありません.C++にmain()関数があり、関数にcoutを入れる必要があります。

1

あなたは関数の外coutを使用したい場合は、

#include<iostream> 
using namespace std; 

bool b=cout<<"1"; 

int main() 
{ 

return 0; 

} 

boolean.see以下の例では、出力COUTによって返された値を収集することでそれを行うことができます含める

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

を:

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

がお手伝いします。この問題は通常、いくつかの章の後に主機能を使用しない本から学んでいる人に発生します。

関連する問題