質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

[コンパイルエラー] 構造体が定義されていませんのエラー原因が知りたい

samidare_chan
samidare_chan

総合スコア278

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

2回答

-2評価

0クリップ

351閲覧

投稿2022/08/13 02:13

編集2022/08/13 13:21

提示コードですが以下のエラーが出るのですが「error: ‘Console::ListItem’ has not been declared」「Console::ListItemが定義されていません」とはどういう意味なのでしょうか?同じ名前空間のなので定義されているはずなのですが?

確認したこと

インクルードガードがそれぞれ違うかどうか確認
同じ名前空間かどうか確認
スペルミスを確認

知りたいこと

1,エラー原因が知りたいなぜ定義されてないなのか?
2,Console::ListItemListItemは何が違うのか?

Error
shigurechan@shigurechan-System-Product-Name:~/Program/ScriptEditor$ make all make ext_lib make[1]: ディレクトリ '/home/shigurechan/Program/ScriptEditor' に入ります ar x /usr/lib/libncurses.a --output lib/obj make[1]: ディレクトリ '/home/shigurechan/Program/ScriptEditor' から出ます make make[1]: ディレクトリ '/home/shigurechan/Program/ScriptEditor' に入ります g++ -c -MMD -MP src/Main.cpp -o obj/Main.o In file included from src/../lib/src/Console.hpp:9, from src/MainScreen.hpp:6, from src/Main.cpp:2: src/../lib/src/MenuWindow.hpp:20:22: error: ‘Console::ListItem’ has not been declared 20 | void SetItem(Console::ListItem i); | ^~~~~~~ src/../lib/src/MenuWindow.hpp:33:30: error: ‘ListItem’ is not a member of ‘Console’ 33 | std::vector<Console::ListItem> item; | ^~~~~~~~ src/../lib/src/MenuWindow.hpp:33:38: error: template argument 1 is invalid 33 | std::vector<Console::ListItem> item; | ^ src/../lib/src/MenuWindow.hpp:33:38: error: template argument 2 is invalid In file included from src/Main.cpp:2: src/MainScreen.hpp:25:14: error: ‘ListWindow’ in namespace ‘Console’ does not name a type 25 | Console::ListWindow menu; | ^~~~~~~~~~ make[1]: *** [Makefile:25: obj/Main.o] エラー 1 make[1]: ディレクトリ '/home/shigurechan/Program/ScriptEditor' から出ます make: *** [Makefile:56: all] エラー 2 shigurechan@shigurechan-System-Product-Name:~/Program/ScriptEditor$
Console.hpp

cpp

#ifndef ___CONSOLE_HPP___ #define ___CONSOLE_HPP___ #include <iostream> #include <glm/glm.hpp> #include <ncurses.h> #include "Debug.hpp" #include "Help.hpp" #include "MenuWindow.hpp" //#include "ListWindow.hpp" namespace Console { struct ListItem { std::string title; Console::ColorPair color; int renderOption = 0; }; #define LINE_BUFFER ((int)1000) void Init(); //初期化 void SetDispInput(bool b); //入力文字 void SetInputBuffer(bool b); //入力バッファ void SetDispCursor(WINDOW *win,bool b); //カーソル void SetKeyPad(WINDOW *win,bool b); //特殊キー void RenderBuffer(WINDOW *win); //バッファー描画 void ClearBuffer(WINDOW *win); //バッファークリア void Close(); //プログラム終了 //デバッグ void Init_Log(const char* fileName); //ログファイルを指定 void Init_File(const char* fileName); //テキストファイルを指定 void Init_ErrorLog(const char* fileName); //エラーログファイルを指定 void Write(const char* fmt,...); //logFileに書き込み  void WriteLine(const char* fmt,...); //logFileに書き込み 改行 void Write_File(const char* fileName,const char* fmt,...); //指定したログファイルに書き込み void Write_FileLine(const char* fileName,const char* fmt,...); //指定したログファイルに書き込み 改行 //描画 void RenderString(ColorCode fg,ColorCode bg,WINDOW *win,glm::ivec2 pos,const char* fmt,...); void RenderString_Bold(ColorCode fg,ColorCode bg,WINDOW *win,glm::ivec2 pos,const char* fmt,...); void RenderString_Blink(ColorCode fg,ColorCode bg,WINDOW *win,glm::ivec2 pos,const char* fmt,...); void RenderString_UnderLine(ColorCode fg,ColorCode bg,WINDOW *win,glm::ivec2 pos,const char* fmt,...); glm::ivec2 GetScreenSize(WINDOW* win); //画面サイズを取得 std::string InputString(); //文字列入力 int Input(); //文字入力 } #endif
MenuWindow.hpp

cpp

#ifndef ___MENUWINDOW_HPP___ #define ___MENUWINDOW_HPP___ #include <string> #include <vector> #include <ncurses.h> #include <glm/glm.hpp> #include "Console.hpp" namespace Console { class MenuWindow { public: MenuWindow(); ~MenuWindow(); void SetItem(Console::ListItem i); void Render(WINDOW *win,glm::ivec2 pos); void Update(); void SetCursorDown(); void SetCursorUp(); private: Console::ColorPair selectColor; std::vector<Console::ListItem> item; glm::ivec2 cursorPosition; glm::ivec2 cursor = glm::ivec2(0,0); }; } #endif
Main.cpp

cpp

#include <iostream> #include "MainScreen.hpp" #include <memory> //#include <Magick++.h> #include "../lib/src/Console.hpp" int main() { Console::Init(); Console::Init_ErrorLog("log/error.log"); Console::Init_Log("log/log.log"); Console::RenderBuffer(NULL); std::unique_ptr<MainScreen> main = std::make_unique<MainScreen>(); while(true) { main->Loop(); if (main->getExit() == true) { break; } } Console::Close(); return 0; }
MainScreen.hpp

cpp

#ifndef ___MAINSCREEN_HPP___ #define ___MAINSCREEN_HPP___ #include <vector> #include <filesystem> #include <glm/glm.hpp> #include "../lib/src/Console.hpp" class MainScreen { public: MainScreen(); ~MainScreen(); void Loop(); bool getExit(); private: void Update(); void Render(); void KeyInput(); Console::ListWindow menu; glm::ivec2 cursorPosition; bool isExit = false; }; #endif

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SaitoAtsushi

2022/08/13 02:57

Main.cpp を提示してください。 その中で #include "MenuWindow.hpp" #include "Console.hpp" とでも書いてあったらそれが原因ですね。
samidare_chan

2022/08/13 03:30 編集

なるほど自己解決ようにして解決したのですがConsole::ListItem とListItemは何が違うのでしょうか?名前空間を指定しなのとそうじゃない場合です。同じ名前空間で

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。