1. ホーム
  2. Qt

linux ubuntu 'string' はこのスコープで宣言されていない Parse

2022-02-17 16:47:37

linux ubuntu では、'string' がこのスコープで宣言されていない場合にエラーが発生します。


以下のようにエラーが報告されます。
  1. test2.h:5:17: error: 'string' is not member of 'std'.  
  2. aries@ubuntu:~/aries/Makefile/Demo$ g++ -o main main.cpp   
  3. main.cpp:1:0からインクルードされたファイルにあります。  
  4. test1.h:5:17: error: variable or field 'test1_cout' declared  無効
  5. test1.h:5:17: error: 'string' is not declared in.  この  スコープ  
  6. main.cpp:2:0からインクルードされたファイルにあります。  
  7. test2.h:5:17: error: variable or field 'test2_cout' declared  無効
  8. test2.h:5:17: error: 'string' is not declared in.  この  スコープ  
  9. aries@ubuntu:~/aries/Makefile/Demo$。   

ok! まず、問題を一つずつトラブルシューティングしていきます



error.h

  1. #ifndef _ERROR_1_
  2. #define _ERROR_1_
  3. #include<cstring>
  4. <スパン
  5. <スパン 空白  cout_1(string a1);  
  6. <スパン
  7. <スパン #endif

error.c

  1. #include<error.h>
  2. #include<iostream>
  3. 使用 名前空間  stdです。  
  4. 空白  cout_1(string str)  
  5. {  
  6.         cout << str<< endl;  
  7. }  
  8. <スパン int  main()  
  9. {  
  10.         cout_1( "test" );  
  11. 戻る  0;  
  12. }  

ランニング効果。
  1. aries@ubuntu:~/aries/Makefile/Demo$ g++ -o error error.cpp   
  2. aries@ubuntu:~/aries/Makefile/Demo$ . /error   
  3. テスト  

2 mainを単独で持ち出すとどうなるか?

error_h.cpp


  1. #include<error.h>
  2. <スパン
  3. <スパン 空白  cout_1(string str)  
  4. {  
  5.         cout << str<< endl;  
  6. }  

error.cを修正する
  1. #include"error.h"
  2. #include"error_h.cpp"
  3. #include<iostream>
  4. 使用 名前空間  stdです。  
  5. <スパン int  main()  
  6. {  
  7.     cout_1( "test" );  
  8. 戻る  0;  
  9. }  

以下のように実行されます。
  1. aries@ubuntu:~/aries/Makefile/Demo$ g++ -o error error.cpp   
  2. error.cpp:1:0 からインクルードされたファイルにあります。  
  3. error.h:5:13: error: variable or field 'cout_1' declared  無効
  4. error.h:5:13: error: 'string' was not declared in  この  スコープ  
  5. error.cpp:2:0 からインクルードされたファイルにあります。  
  6. error_h.cpp:3:13: error: variable or field 'cout_1' declared  無効
  7. error_h.cpp:3:13: エラー: 'string' が  この  スコープ  
  8. error.cpp: 関数' int  main()'とします。  
  9. error.cpp:9:15: error: 'cout_1' is not declared in.  この  スコープ  

OK! また上記の問題が出てきました。

質問です。なぜc++はcのようになれないのでしょうか?

3 グーグルを試してみました


その後、ネットで答えを探します。このエラーは次のような場合に発生します。

1. 変数、関数、またはクラスが宣言または定義されていない。これは最も単純なケースです。


2. ヘッダーファイルが互いに #include しているため、依存関係エラーが発生します。例えば、ヘッダーファイルが以下のような循環的な依存関係を形成している。

  1. /***ファイル a ****/
  2.  #ifndef FILE_A_
  3.  #define FILE_A_
  4.  #include <file b>
  5.  #endif 
  6. <スパン
  7. <スパン /****file b ***/
  8.   #ifndef FILE_B_