提示コードですが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
> エラー C2065 'CharacterTexture': 定義されていない識別子です
namespace を明示してもダメですか?
> エラー C2039 'CharacterTexture': 'FrameWork' のメンバーではありません
CaracterTexture は 名前空間 Framework にないのでは?
'CharacterTexture': 'FrameWork' のメンバーではありません というコンパイルエラーに変わりました。
CharacterTexture の定義されたヘッダは #include されていますか?
提示コードのFrameWork/FrameWork.hppに定義されています。
Resource.cpp:
> CharacterTexture ch =
これを
Framework::CharacterTexture ch =
としてもダメ?
回答1件
あなたの回答
tips
プレビュー