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

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

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

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

C++

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

Q&A

解決済

1回答

2567閲覧

「コンパイルエラー」 [〇〇は定義されていない識別子です]の解決方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

コンパイルエラー

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

C++

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

0グッド

0クリップ

投稿2021/12/28 07:14

編集2021/12/28 07:23

提示コードですがFrameWork.hppのヘッダファイルをインクルードしたソースファイルでその名前空間にあるFrameWork::Textureなどを使うと定義されていない識別子ですというエラーが大量に出るのですがこれは何が原因なのでしょうか?namespaceを明示してもコンパイルエラーになります。

※FrameWork.hppは利用側が利用するヘッダーファイルで
Reousrce.hpp,Resource.cppはフレームワークが利用するコードという設計です。

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2065 'CharacterTexture': 定義されていない識別子です

namespace を明示

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2039 'CharacterTexture': 'FrameWork' のメンバーではありません AAEditor

イメージ説明

FrameWork/FrameWork.hpp
#ifndef ___FRAMEWORK___HPP___ #define ___FRAMEWORK___HPP___ #include <iostream> #include <vector> #include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include "../header/Resource.hpp" #include "../header/Window.hpp" #include "../header/Camera.hpp" #include "../header/Sprite.hpp" #include "../header/Vertex.hpp" #include "../header/Simple.hpp" #include "../header/Shape.hpp" #include "../header/Text.hpp" #include "../header/Model.hpp" namespace FrameWork { //Help 関係 #define PI ((float)(3.14159265359)) int GetRandom(int start, int end); float GetAngle(float r); glm::vec2 GetWindowCenter(); glm::vec4 GetRGBAColor(const glm::vec4 rgb); std::vector<char> GetFormatString(const char* args, ...); glm::vec3 GetSurfaceNormal(const glm::vec3 v1, const glm::vec3 v2, const glm::vec3 v3); glm::vec3 GetSurfaceNormal_Normalized(const glm::vec3 v1, const glm::vec3 v2, const glm::vec3 v3); float GetAspect(); // ##################################### ロード関係 ##################################### //ロード関係 //テクスチャファイル typedef struct texture { glm::ivec2 size; //サイズ GLuint ID; //テクスチャハンドル } Texture; //文字 構造体 typedef struct character_texture { GLuint textureID; // グリフのテクスチャID glm::lowp_u8vec2 size; // グリフサイズ glm::lowp_u8vec2 bearing; // グリフのベースライン unsigned short advance; // 次のグリフまでのオフセット wchar_t character; // 文字 glm::vec4 color; //カラー int pixelSize; //ピクセルサイズ glm::vec2 scale; //スケール } CharacterTexture; //サウンドファイル typedef struct sound_file { } SoundFile; typedef struct object_file { std::vector<VertexAttribute> attribute; std::vector<unsigned int> index; } ObjFile; void GenStringTexture(std::vector<CharacterTexture>* character, const char* fontPath, int pixelSize, glm::vec4 color, const char* args, ...); void GenStringTexture_Scale(std::vector<CharacterTexture>* character, const char* fontPath, int pixelSize, glm::vec4 color, glm::vec2 scale, const char* args, ...); CharacterTexture GenCharacterTexture(const char* fontPath, int pixelSize, glm::vec4 color, const char* args, ...); Texture LoadTexture(const char* fileName); //テクスチャーロード std::shared_ptr<std::vector<GLchar>> LoadShader(const char* fileName); //シェーダーロード SoundFile LoadSound(const char* fileName); //サウンドロード FT_Face LoadFont(const char* fileName); //フォントロード std::shared_ptr<FrameWork::ObjFile> LoadObj(const char* filename); // ウインドウコンテキスト 関係 const glm::ivec2 GetWindowSize(); int GetKeyInput(int keyCode); // 初期化 関係 void Init_FrameWork(); std::shared_ptr<FrameWork::Window> GenWindowContext(const glm::ivec2 size, const char* title); std::shared_ptr<FrameWork::Window> GetCurrentContext(); void setCurrentContext(std::shared_ptr<FrameWork::Window> win); }; #endif
Resource.hpp
#ifndef ___RESOURCE_HPP_ #define ___RESOURCE_HPP_ #include <vector> #include <memory> //#include <GL/gl.h> #include <glm/glm.hpp> #include "Init.hpp" #include "Help.hpp" #include "Vertex.hpp" #include "../FrameWork/FrameWork.hpp" namespace FrameWork { } #endif
Resource.cpp
#define _CRT_SECURE_NO_WARNINGS #include "../header/Resource.hpp" #include "../FrameWork/FrameWork.hpp" #include <fstream> #include <vector> #define STB_IMAGE_IMPLEMENTATION #include <stb/stb_image.h> #include "../header/Init.hpp" // ##################################### 単一テクスチャ 生成 ##################################### FrameWork::CharacterTexture FrameWork::GenCharacterTexture(const char* fontPath, int pixelSize, glm::vec4 color, const char* args, ...) { std::vector<char> charText(sizeof(args), '\0'); wchar_t wcharText; //書式指定文字列に変換 va_list va; va_start(va, args); int er = vsprintf_s(charText.data(), charText.size(), args, va); if (er < 0) { std::cerr << "GenCharacterTexture() Error: vsprintf_s(): " << er << std::endl; assert(0); } va_end(va); mbrtowc(&wcharText, &charText.at(0), (size_t)MB_CUR_MAX, nullptr);//wchar_t型文字を生成 FT_Face face = LoadFont(fontPath); //フォントをロード FT_Error err = FT_Set_Pixel_Sizes(face, 0, pixelSize); if (err != 0) { std::cerr << "FrameWork::getGenCharacterTexture() Error: FT_Set_Pixel_Sizes: " << err << std::endl; assert(0); } err = FT_Load_Glyph(face, FT_Get_Char_Index(face, wcharText), FT_LOAD_RENDER); if (err != 0) { std::cerr << "FrameWork::getGenCharacterTexture() Error: FT_Load_Glyph: " << err << std::endl; assert(0); } CharacterTexture ch = { 0, glm::lowp_u8vec2(face->glyph->bitmap.width, face->glyph->bitmap.rows), glm::lowp_u8vec2(face->glyph->bitmap_left, face->glyph->bitmap_top), (unsigned short)face->glyph->advance.x, wcharText, color, pixelSize, glm::vec2(1.0f,1.0f), }; glGenTextures(1, &ch.textureID); glBindTexture(GL_TEXTURE_2D, ch.textureID); glActiveTexture(GL_TEXTURE0); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexImage2D ( GL_TEXTURE_2D, 0, GL_RED, face->glyph->bitmap.width, face->glyph->bitmap.rows, 0, GL_RED, GL_UNSIGNED_BYTE, face->glyph->bitmap.buffer ); //テクスチャタイプを設定 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); return ch; } /* その他。FrameWork.hppの関数定義なのど */
Text.hpp
#ifndef ___TEXT_HPP_ #define ___TEXT_HPP_ #include <iostream> #include <stdio.h> #include <vector> #include <array> #include <stdarg.h> #include <map> #include <glm/glm.hpp> #include "Resource.hpp" #include "../FrameWork/FrameWork.hpp" #include "Help.hpp" #include "Render.hpp" #include "Vertex.hpp" #include <vector> #include <memory> //#include <GL/gl.h> #include <glm/glm.hpp> #include "Init.hpp" #include "Help.hpp" #include "Vertex.hpp" /*######################################################################### # 文字描画クラス 説明 文字を描画する ###########################################################################*/ namespace FrameWork { class Text : public Render { public: Text(); //コンストラクタ ~Text(); //デストラクタ void Renderer(const glm::vec3 position,const std::vector<CharacterTexture>* character)const; private: static std::array<FrameWork::VertexAttribute,6> vertex; static GLuint vao; static GLuint vbo; }; }; #endif

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/12/28 07:25 編集

> エラー C2065 'CharacterTexture': 定義されていない識別子です namespace を明示してもダメですか? > エラー C2039 'CharacterTexture': 'FrameWork' のメンバーではありません CaracterTexture は 名前空間 Framework にないのでは?
退会済みユーザー

退会済みユーザー

2021/12/28 07:23

'CharacterTexture': 'FrameWork' のメンバーではありません というコンパイルエラーに変わりました。
episteme

2021/12/28 07:26

CharacterTexture の定義されたヘッダは #include されていますか?
退会済みユーザー

退会済みユーザー

2021/12/28 07:27

提示コードのFrameWork/FrameWork.hppに定義されています。
episteme

2021/12/28 07:33

Resource.cpp: > CharacterTexture ch = これを Framework::CharacterTexture ch = としてもダメ?
guest

回答1

0

ベストアンサー

原因はA.cppがA.hppをインクルードしてframework.hppがA.hppをインクルードしてA.hppがframework.hppをインクルードしていることが原因でした。
インクルードガードはすべてのヘッダーに導入済みです。

投稿2021/12/28 08:39

編集2021/12/29 02:38
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/12/28 10:34

説明になっていない。それがどう関係するんですか? includeの無限連鎖ですか? include-guardは仕込んでないんですか?
退会済みユーザー

退会済みユーザー

2021/12/28 10:35

インクルードガードは導入済みです。
episteme

2021/12/28 10:37

で、それのどこが原因だったのですか?
退会済みユーザー

退会済みユーザー

2021/12/28 10:38

インクルードループです。
episteme

2021/12/29 07:20 編集

わけわからん。「インクルードガードは導入済みです。」ならインクルードループにはならんだろ。 # インクルードガード ってなんだかわかってます?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問