提示コードの//### 可変長引数 描画 ### なのですがこのテンプレート関数を使おうとすると未定義の外部参照というエラーが出るのですがこれはどうやれば正常利用することができるのでしょうか?
コンパイルエラー [ 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK2019 未解決の外部シンボル "public: void __cdecl FrameWork::Text::Draw<int>(struct glm::vec<2,float,0>,char const *,unsigned short,struct glm::vec<4,float,0>,char const *,int const &)" (??$Draw@H@Text@FrameWork@@QEAAXU?$vec@$01M$0A@@glm@@PEBDGU?$vec@$03M$0A@@3@1AEBH@Z) が関数 main で参照されました FrameWork C:\Users\yw325\Desktop\ActionGame\FrameWork\FrameWork\Main.obj 1
]
cpp
1text.Draw<int>(glm::vec2(100, 100), "Font/PressStart2P.ttf", 25, glm::vec4(0, 255, 0, 255), "Hello World ! {} ",42); 2
cpp
1#include "Text.hpp" 2 3#include "glew/include/GL/glew.h" 4#include "glm/glm.hpp" 5#include "uchar.h" 6#include "Window.hpp" 7#include "FrameWork.hpp" 8#include <iostream> 9#include <vector> 10#include <format> 11 12// ##################################### コンストラクタ ##################################### 13FrameWork::Text::Text() : FrameWork::Transform_2D() 14{ 15 16} 17 18// ##################################### 可変文字列 描画 ##################################### 19template <typename... Args> 20void FrameWork::Text::Draw(const glm::vec2 pos, const char* font, unsigned short pixel, const glm::vec4 color, const char* str, const Args&... args) 21{ 22 //マルチバイト文字をワイド文字変換 23 24 va_list args = NULL; 25 va_start(args, str); 26 std::string sr = std::format(str,args); 27 va_end(args); 28 29 std::cout << sr << std::endl; 30 31 //std::format(); 32 33 34 35 36 //フォントサイズ、フォント名を変更する時 37 38 39 if (NULL == font) 40 { 41 std::cout << "文字列がNULL" << std::endl; 42 43 fontName = std::string(DEFAULT_FONT); //既定フォント 44 pixelSize = pixel; //ピクセルサイズ 45 46 setFontName(fontName.c_str()); //フォント 47 setPixelSize(pixelSize); //ピクセルサイズ 48 49 50 charText = charText; 51 text = getTexture(getWchar_t(charText), fontName.c_str(), pixelSize, face); //テクスチャを生成 52 } 53 else if ( (pixelSize != pixel) || (fontName != std::string(font))) 54 { 55 std::cout << "フォントサイズ、フォント名を変更する時" << std::endl; 56 if (font == NULL) 57 { 58 fontName = std::string(DEFAULT_FONT); 59 } 60 else 61 { 62 fontName = font; 63 } 64 65 pixelSize = pixel; //ピクセルサイズ 66 67 setFontName(fontName.c_str()); //フォント 68 setPixelSize(pixelSize); //ピクセルサイズ 69 70 71 charText = charText; 72 text = getTexture(getWchar_t(charText), fontName.c_str(), pixelSize, face); //テクスチャを生成 73 } 74 else if( std::string(charText.data()) != std::string(charText.data()) ) 75 { 76 std::cout << "FixText" << std::endl; 77 FixText(text,getWchar_t(charText)); 78 charText = charText; 79 } 80 else 81 { 82 std::cout << "ああああ" << std::endl; 83 } 84 85 setTextSize(textSize, text); //文字列のサイズを取得 86 87 88 89 RenderCharacter(pos, pixelSize,color, text); //文字描画 90} 91 92// ##################################### テクスチャを生成 ##################################### 93std::vector<FrameWork::Text::Character> FrameWork::Text::getTexture(const std::vector<wchar_t> &text,const char* fontName, const unsigned short &pixelSize,FT_Face &face) 94{ 95 96} 97 98// ##################################### 文字列のサイズを設定 ##################################### 99void FrameWork::Text::setTextSize(glm::lowp_i16vec2 &size, const std::vector<Character> &character) 100{ 101} 102 103// ##################################### wchar_t型の文字列を取得 ##################################### 104std::vector<wchar_t> FrameWork::Text::getWchar_t(const std::vector<char> charText) 105{ 106 107} 108 109// ##################################### 文字列のサイズを取得 ##################################### 110glm::lowp_i16vec2 FrameWork::Text::getTextSize() 111{ 112 113} 114 115// ##################################### 文字列を描画 ##################################### 116void FrameWork::Text::RenderCharacter(glm::vec2 pos, const unsigned short &pixelSize,const glm::vec4 color,const std::vector<Character> &character) 117{ 118 119} 120 121 122// ##################################### 文字列修正 ##################################### 123void FrameWork::Text::FixText(std::vector<Character> &character, const std::vector<wchar_t>& newText) 124{ 125 126} 127 128// ##################################### ピクセルサイズ設定 ##################################### 129void FrameWork::Text::setPixelSize(unsigned short n) 130{ 131 132} 133 134// ##################################### フォント指定 ##################################### 135void FrameWork::Text::setFontName(const char* str) 136{ 137 138} 139 140 141// ##################################### デストラクタ ##################################### 142FrameWork::Text::~Text() 143{ 144 145}
cpp
1#ifndef ___TEXT_HPP_ 2#define ___TEXT_HPP_ 3#include "Transform_2D.hpp" 4//#include "Shader.hpp" 5#include "Help.hpp" 6 7#include "glm/glm.hpp" 8#include <map> 9#include "ft2build.h" 10#include FT_FREETYPE_H 11#include <vector> 12 13/*######################################################################### 14# 文字描画クラス 15 16説明 17 文字を描画する 18###########################################################################*/ 19 20#define DEFAULT_FONT "Font/SourceHanCodeJP.ttc" 21 22namespace FrameWork 23{ 24 class Window; 25 26 class Text : protected FrameWork::Transform_2D 27 { 28 29 public: 30 31 Text(); //コンストラクタ 32 ~Text(); //デストラクタ 33 34 template <typename... Args> 35 void Draw(const glm::vec2 pos,const char*font,unsigned short pixel,const glm::vec4 color, const char* str, const Args&... args); 36 glm::lowp_i16vec2 getTextSize(); //文字列のサイズ取得 37 38 39 private: 40 41 //文字構造体 42 struct Character 43 { 44 unsigned int textureID; //グリフのテクスチャID 45 glm::ivec2 size; //グリフサイズ 46 glm::ivec2 bearing; //グリフのベースライン 47 unsigned int advance; //次のグリフまでのオフセット 48 wchar_t character; //文字 49 }; 50 51 52 std::vector<Character> text; //文字列 53 std::vector<char> charText; //char型文字列 54 glm::lowp_i16vec2 textSize; //文字列のサイズ 55 unsigned short pixelSize; //ピクセルサイズ 56 std::string fontName; //フォント名 57 FT_Face face; //フェイス 58 59 std::vector<Character> getTexture(const std::vector<wchar_t>& text, const char* fontName, const unsigned short& fontSize, FT_Face& face); //テクスチャを生成 60 std::vector<wchar_t> getWchar_t(const std::vector<char> charText); //wchar_t型の文字列を取得 61 void setTextSize(glm::lowp_i16vec2 &size,const std::vector<Character> &character); //文字列のサイズを取得 62 void RenderCharacter(glm::vec2 pos, const unsigned short& FontSize, const glm::vec4 color, const std::vector<Character> &character); //文字列を描画 63 void FixText(std::vector<Character>& character, const std::vector<wchar_t>& newText); //文字列を修正 64 65 66 void setPixelSize(unsigned short n); //フォントサイズ設定 67 void setFontName(const char* str); //フォント設定 68 69 70 FT_Library ft; //freetype 71 }; 72} 73#endif
回答1件
あなたの回答
tips
プレビュー