🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

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

Q&A

解決済

2回答

9222閲覧

定義されている関数のリンクエラーが発生する

ha-mu

総合スコア11

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

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

0グッド

0クリップ

投稿2017/06/04 04:49

###前提・実現したいこと
cocos2d-xでVisual Studioにてコードを書いてゲームを作っていたところ、リンクエラーが発生してコンパイルが通らなくなってしまったので、原因が知りたいです。
当該のソースコードが長く、どこが原因なのかわからない状況なので、失礼ながらGithubのページを貼らせていただきます。Githubのソースコードのページ

###発生している問題・エラーメッセージ

このソースをコンパイルすると次のようなエラーが発生します。

エラー LNK2019 未解決の外部シンボル "public: static class Control * __cdecl day0::Esc::createControl(void)" (?createControl@Esc@day0@@SAPAVControl@@XZ) が関数 "public: __thiscall <lambda_2ce949d33d01c661ff20a149da4ce5a6>::operator()(void)const " (??R<lambda_2ce949d33d01c661ff20a149da4ce5a6>@@QBE@XZ) で参照されました。 rifujin2 C:\cocos2d-x\projects\rifujin2\proj.win32\Prologue.obj 1

###該当のソースコード
Sequence/Prologue.cppの111行目

cpp

1auto control = (day0::Esc*)day0::Esc::createControl();

が参照している、Script/day0/fieldDef.hの26行目

cpp

1static Control* createControl();

が未解決だというエラーのようですが、ここの定義はScript/day0/fieldList.cppの8行目

cpp

1Control* Esc::createControl() { 2 return Esc::create(); 3}

に記載されています。

###試したこと
Script/day0/fieldDef.hの2行目

cpp

1#pragma execution_character_set("utf-8")

をコメントアウトしたり付け直したりして、コンパイルが通ることがありましたが、別のソースコードを編集してビルドすると度々同じ場所でリンクエラーが発生し、再びここのコメントを弄って直していました。
しかし、ここのコメントを変えてもどこを書き換えても直らない時があり、調べても根本的な原因がわからなかったので質問させていただきました。
ソースコードは全てUnicode(utf-8 シグネチャ付き)で保存しています。
AndroidStudioでビルドした時はきちんとコンパイルは通りました。

###補足情報(言語/FW/ツール等のバージョンなど)
言語:C++
フレームワーク:cocos2d-x v3.15
開発環境:Visual Studio Community 2017

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

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

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

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

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

guest

回答2

0

こんにちは。

昔はVisual Studioのインクリメンタル・リンカで原因不明のシンボル無し等で苦しんだものでした。
最近はあまり遭遇しないので外しているかも知れませんが、一度、プロジェクトをクリーンしてみたら治らないでしょうか?

#pragma execution_character_set("utf-8")

長らくアンドキュメンテッドだった機能ですが、正式サポートしたっぽいですね。
しかし、これはnarrow文字列リテラルの文字コードを指定する機能ですので、直接の関係は無いはずです。
ここを修正することでヘッダのタイムスタンプが変わり、fieldList.cppがビルドされ、状況が変化したのかも知れません。

投稿2017/06/04 05:34

Chironian

総合スコア23272

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

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

ha-mu

2017/06/04 12:52

ご回答ありがとうございます。 おっしゃるとおりに、プロジェクトをクリーンしてみましたが同じ結果でした。 また、cocos2d-xを3-15.1に更新した上で、プロジェクトを作り直してソースコードとリソースだけ移してビルドしても同じ結果でした。 宣言と定義の文字コードが違うとエラーが起きるのかなと推測したのですが、それが原因でもなさそうですね…
Chironian

2017/06/04 14:56

プロジェクトを作り直してもダメとなると、これは分からないです。 新規に作成した時のfieldList.cppの追加漏れとか、Visual Studio 2017になにか不具合が潜んでいるとかくらいしか思いつかないです。 どちらも考えにくい印象です。 お役に立てずすいません。
ha-mu

2017/06/05 08:17

いえいえ、とても参考になりました。ありがとうございます。 引き続き自分で考えてみます
guest

0

自己解決

先ほど自己解決しました。
オブジェクトファイルはソースコードがフォルダ分けされていても、同じ場所にファイル名と同じ名前で生産されるので、フォルダday0とday1内の同じ名前のcppファイルが同じオブジェクトファイルで生成されてしまったというものでした。
ですので、それぞれ違うファイルで保存したら治りました。

cocos2d-xで大量の警告が出るのはいつものことだったので、無意識に消してしまっていましたが、そこにちゃんと書いてありました…
反省します。お騒がせしました。

投稿2017/06/05 08:41

ha-mu

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問