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

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

新規登録して質問してみよう
ただいま回答率
85.48%
文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

C++

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

Q&A

0回答

1151閲覧

ライブラリの#defineの文字を自動で表示させいたい。

退会済みユーザー

退会済みユーザー

総合スコア0

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

C++

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

0グッド

0クリップ

投稿2021/06/25 12:50

編集2021/06/26 04:14

参考サイト1ですが参考サイト2の#define のダブルクォートの文字を表示させいたです。エラー番号を取得してその番号に合う#define を自動で見つけて画面に表示すという処理を実装したいのですがこれはどうやるのでしょか?
提示コードは参考サイトのコードですが FT_Errrr_String();関数を実行しても例外エラーが出るだけしたのでやり方がわかりません。
また参考サイト3のコードを入力して実装を試みたのですがエラーが出てコンパイルできません。

エラー[ 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK1169 1 つ以上の複数回定義されているシンボルが見つかりました。 FrameWork C:\Users\yw325\Desktop\ActionGame\FrameWork\x64\Debug\FrameWork.exe 1
]

参考サイト1: https://www.freetype.org/freetype2/docs/reference/ft2-error_enumerations.html
参考サイト2: https://www.freetype.org/freetype2/docs/reference/ft2-error_code_values.html
参考サイト3: https://stackoverflow.com/questions/31161284/how-can-i-get-the-corresponding-error-string-from-an-ft-error-code

cpp

1#undef FTERRORS_H_ 2 #define FT_ERRORDEF( e, v, s ) { e, s }, 3 #define FT_ERROR_START_LIST { 4 #define FT_ERROR_END_LIST { 0, NULL } }; 5 6 const struct 7 { 8 int err_code; 9 const char* err_msg; 10 } ft_errors[] = 11 12 #include <freetype/fterrors.h>

cpp

1FT_Error_String( FT_Error error_code );

cpp

1#ifndef ___TEXT_HPP_ 2#define ___TEXT_HPP_ 3#include "Transform_2D.hpp" 4#include "Help.hpp" 5#include <vector> 6#include <format> 7 8#include "glm/glm.hpp" 9#include <map> 10#include "ft2build.h" 11#include FT_FREETYPE_H 12 13/*######################################################################### 14# 文字描画クラス 15 16説明 17 文字を描画する 18###########################################################################*/ 19 20 21 22 23#define DEFAULT_FONT "Font/SourceHanCodeJP.ttc" 24 25 26 27 28namespace FrameWork 29{ 30///////////////////////////////////////////////////////////////////// 31 const char* getError(FT_Error err) 32 { 33#undef FTERRORS_H_ 34#define FT_ERRORDEF( e, v, s ) case e: return s; 35#define FT_ERROR_START_LIST switch (err) { 36#define FT_ERROR_END_LIST } 37#include FT_ERRORS_H 38 return "(Unknown error)"; 39 } 40//////////////////////////////////////////////////////////////////// 41 class Window; 42 43 class Text : protected FrameWork::Transform_2D 44 { 45 46 public: 47 48 Text(); //コンストラクタ 49 ~Text(); //デストラクタ 50 51 52 glm::lowp_i16vec2 getTextSize(const unsigned int num); //文字列のサイズ取得 53 54 // ##################################### 固定長文字列 文字列 設定 ##################################### 55 template <typename... Args> 56 void setString(const char* fontName, unsigned short pixelSize, const glm::vec4 color, const char* text, const Args& ... args) 57 { 58 //マルチバイト文字をワイド文字変換 59 if (text != NULL) 60 { 61 std::string str = std::format(text, args...); 62 CharacterString character; 63 64 //フォント指定 NULLの場合は既定のフォントを設定 65 if (fontName == NULL) 66 { 67 character.fontName = std::string(DEFAULT_FONT); 68 } 69 else 70 { 71 character.fontName = std::string(fontName); 72 } 73 74 //ピクセルサイズが1以下の場合 75 if (pixelSize <= 0) 76 { 77 std::cerr << "Text ピクセルサイズ: " << pixelSize << std::endl; 78 assert(0); 79 } 80 81 character.pixelSize = pixelSize; //ピクセルサイズ 82 character.color = color; //カラー 83 84 setFontName(character.fontName.c_str(), character.face); //フォント設定 85 setPixelSize(character.pixelSize, character.face); //ピクセルサイズ設定 86 87 character.text = getTexture(getWchar_t(str.c_str()), character.fontName.c_str(), character.pixelSize, character.face); //テクスチャ生成 88 89 setTextSize(character.textSize, character.text); //文字列サイズを設定 90 characterText->push_back(character); //文字列を格納 91 } 92 else 93 { 94 std::cerr <<"Text テキストがNULLです。"<< std::endl; 95 assert(0); 96 } 97 98 } 99 100 // ##################################### 固定長文字列 文字列 再設定 ##################################### 101 template <typename... Args> 102 void ResetString(unsigned int num ,const char* fontName, unsigned short pixelSize, const glm::vec4 color, const char* text, const Args& ... args) 103 { 104 if (text != NULL) 105 { 106 //マルチバイト文字をワイド文字変換 107 std::string str = std::format(text, args...); 108 109 //フォント、ピクセルサイズ、カラー どれかが違うとき 110 if ( (characterText->at(num).fontName != std::string(fontName)) || (characterText->at(num).pixelSize != pixelSize) || (characterText->at(num).color != color) ) 111 { 112 characterText->at(num).fontName = std::string(fontName); //フォント 113 characterText->at(num).pixelSize = pixelSize; //ピクセルサイズ 114 characterText->at(num).color = color; //カラー 115 116 setFontName(characterText->at(num).fontName.c_str(), characterText->at(num).face); //フォント設定 117 setPixelSize(characterText->at(num).pixelSize, characterText->at(num).face); //ピクセルサイズ設定 118 119 characterText->at(num).text = getTexture(getWchar_t(str.c_str()), characterText->at(num).fontName.c_str(), characterText->at(num).pixelSize, characterText->at(num).face); //テクスチャ生成 120 setTextSize(characterText->at(num).textSize, characterText->at(num).text); //文字列サイズを設定 121 } 122 else if (str != getString(characterText->at(num).text)) 123 { 124 std::cout << "あああ" << std::endl; 125 FixText(characterText->at(num),getWchar_t(str.c_str())); 126 std::cout << "いいい" << std::endl; 127 128 } 129 } 130 } 131 void DrawString(const glm::vec2 pos,const unsigned short num); //固定長文字列 文字列 描画 132 133 private: 134 135 //文字構造体 136 struct Character 137 { 138 unsigned int textureID; //グリフのテクスチャID 139 glm::ivec2 size; //グリフサイズ 140 glm::ivec2 bearing; //グリフのベースライン 141 unsigned int advance; //次のグリフまでのオフセット 142 wchar_t character; //文字 143 }; 144 145 //文字列構造体 146 struct CharacterString 147 { 148 std::vector<Character> text; //文字列 149 glm::vec4 color; //描画色 150 glm::lowp_i16vec2 textSize; //文字列のサイズ 151 unsigned short pixelSize; //ピクセルサイズ 152 std::string fontName; //フォント名 153 FT_Face face; //フェイス 154 }; 155 156 std::shared_ptr<std::vector<CharacterString>> characterText; //描画文字 157 158 std::vector<Character> getTexture(const std::vector<wchar_t>& text, const char* fontName, const unsigned short& fontSize, FT_Face& face); //テクスチャを生成 159 std::vector<wchar_t> getWchar_t(const char* str); //wchar_t型の文字列を取得 160 std::string getString(std::vector<Character>& charcter); //string型データを取得 161 void setTextSize(glm::lowp_i16vec2 &size,const std::vector<Character> &character); //文字列のサイズを取得 162 void RenderCharacter(glm::vec2 pos, const unsigned short& FontSize, const glm::vec4 &color, const std::vector<Character> &character); //文字列を描画 163 void FixText(CharacterString &character, const std::vector<wchar_t> newText); //文字列を修正 164 165 void setPixelSize(unsigned short n,FT_Face &face); //ピクセルサイズ設定 166 void setFontName(const char* str,FT_Face& face); //フォント設定 167 168 169 FT_Library ft; //freetype 170 171 172 173 }; 174}; 175#endif

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

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

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

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

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

int32_t

2021/06/28 00:11

参考サイト1に、FT_Error_String()を使うために何が必要か書かれていますね。それは試したのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問