DXライブラリのTCHARの互換性エラーが出てしまいます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Mokutsuno
記事: 26
登録日時: 8年前

DXライブラリのTCHARの互換性エラーが出てしまいます

#1

投稿記事 by Mokutsuno » 8年前

LoadDivGraph(graph, 4, 1, 4, width, height, gh);のgraph部分で
「型"TCHAR"の引数は型"const TCHAR *"のパラメータと互換性がありません」と出てしまいます。
プロジェクトのプロパティで文字セットをマルチバイト文字に変更はしています。
どうすることで改善できますでしょうか?
環境は、win10 64bit visualstudio community 2015 です。
よろしくお願いします。

コード:

Main_ui_sub::Main_ui_sub(TCHAR graph)
{
		width = 325;
		height = 50;
		LoadDivGraph(graph, 4, 1, 4, width, height, gh);
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: DXライブラリのTCHARの互換性エラーが出てしまいます

#2

投稿記事 by みけCAT » 8年前

「文字列」が必要なところに「文字」を入れようとしてエラーが出ているので、適切にコードを修正することで改善できるでしょう。

例えば、引数の型をTCHARからLPCTSTRにするか、
インターフェースを変えてはいけないのなら

コード:

Main_ui_sub::Main_ui_sub(TCHAR graph)
{
		TCHAR path[2] = {graph};
		width = 325;
		height = 50;
		LoadDivGraph(path, 4, 1, 4, width, height, gh);
}
みたいな感じでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あんどーなつ
記事: 171
登録日時: 8年前
連絡を取る:

Re: DXライブラリのTCHARの互換性エラーが出てしまいます

#3

投稿記事 by あんどーなつ » 8年前

みけCAT さんが書きました: 例えば、引数の型をTCHARからLPCTSTRにするか、
というのは、

コード:

Main_ui_sub::Main_ui_sub(LPCTSTR graph)
{
        width = 325;
        height = 50;
        LoadDivGraph(graph, 4, 1, 4, width, height, gh);
}
という意味です。LPCTSTRは、const TCHAR *という型と同じなので、

コード:

Main_ui_sub::Main_ui_sub(const TCHAR *graph)
{
        width = 325;
        height = 50;
        LoadDivGraph(graph, 4, 1, 4, width, height, gh);
}
とも書けます。仮引数にconstと書いた場合、const TCHAR *型しか受け付けませんよ、という意味ではなく、
この関数定義においてgraphに代入することを禁止します、という意味です。なので、

コード:

TCHAR filename[256] = "file1.txt";
Main_ui_sub(filename);
という呼び出しはOKになります。

あんどーなつ
記事: 171
登録日時: 8年前
連絡を取る:

Re: DXライブラリのTCHARの互換性エラーが出てしまいます

#4

投稿記事 by あんどーなつ » 8年前

ごめんなさい、これはコンストラクタの定義なので、呼び出し方は

コード:

TCHAR filename[256] = "file1.txt";
Main_ui_sub main1(filename);
とかになりますね。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: DXライブラリのTCHARの互換性エラーが出てしまいます

#5

投稿記事 by みけCAT » 8年前

あんどーなつ さんが書きました:とも書けます。仮引数にconstと書いた場合、const TCHAR *型しか受け付けませんよ、という意味ではなく、
この関数定義においてgraphに代入することを禁止します、という意味です。
この場合は違います。

コード:

Main_ui_sub::Main_ui_sub(const TCHAR *graph)
は、graphではなくgraphの指す先に代入することを禁止するという意味です。

コード:

Main_ui_sub::Main_ui_sub(const TCHAR *graph)
{
        graph[0] = 0; // NG
        graph = 0; // OK
}
graphへの代入を禁止したい場合は、

コード:

Main_ui_sub::Main_ui_sub(TCHAR * const graph)
graphもgraphが指す先も代入を禁止したい場合は、

コード:

Main_ui_sub::Main_ui_sub(const TCHAR * const graph)
と書けます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あんどーなつ
記事: 171
登録日時: 8年前
連絡を取る:

Re: DXライブラリのTCHARの互換性エラーが出てしまいます

#6

投稿記事 by あんどーなつ » 8年前

みけCAT さん

ホントにすいません。考えてみればそうですね。
const TCHAR filename[] = "file1.txt";
と書いたときは、[f][l][e][1][.][t][x][t][\0]が、コード領域(リードオンリー)に格納されるので、
そのデータを使えるようにするにはポインタじゃなくてTCHARのデータそのものを書き込まないようにしないといけないです。

C言語がこんなに便利な言語だとは思いませんでした。
K&Rにも書いてなかったと思います

Mokutsuno
記事: 26
登録日時: 8年前

Re: DXライブラリのTCHARの互換性エラーが出てしまいます

#7

投稿記事 by Mokutsuno » 8年前

ありがとうございます。
無事動きました!

閉鎖

“C言語何でも質問掲示板” へ戻る