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

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

新規登録して質問してみよう
ただいま回答率
85.30%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

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

Q&A

解決済

2回答

3321閲覧

C言語でのヘッダファイルの作成が上手くいかない

wealthy_plonker

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

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

0グッド

0クリップ

投稿2022/06/03 16:43

編集2022/06/03 16:54
  • したいこと

C言語についてです.学校でオセロゲームの課題を出されました.
完成したゲームを「メインファイル(main.c),ヘッダファイル(othelo.cとothelo.h)」の三つに分けないといけません.

  • 該当コード

字数制限の関係上,コードはリンク先に置いてあります.
https://wandbox.org/permlink/zhoTATSOlpo6ZHeB

  • エラー内容

リンク先1つ目のコードは,ネット情報を参考にしつつ一旦メインファイル(main.c)にてプログラムを全て記述したもので,きちんと動作することを確認しました.
イメージ説明
しかし,このコードのマクロ定義や関数類をヘッダファイルに移した方(2~4つ目のmain.c, othelo.h, othelo.c)では,実行すると
「エラー C1090 PDB API の呼び出しに失敗しました。エラー コード '3':」
と出てしまいます.
イメージ説明
何かしらの致命的なエラーであることは分かるのですが,その要因がどこに潜んでいるのかが分かりませんでした.
どのように変更したらエラーを解消できますか?

  • 環境

Visual studio 2019
Windows 10

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

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

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

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

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

jimbe

2022/06/03 17:56

othelo.h の中身を、 main.c で使う関数・enum のみを残し、他は othelo.c に移してみては如何でしょうか。
dodox86

2022/06/03 23:09

VisuaStudioのプロジェクトをクリーンしてリビルドしてみたらどうなりますか?
wealthy_plonker

2022/06/04 09:52

dodox86さんの仰るようにプロジェクトのリビルドにより治りました!ありがとうございます!
guest

回答2

0

g++ですがコンパイルしたところ下記のエラーが出ました。

1.othelo.cの#pragama onceが不要
2.othelo.hに書いている変数がmain.cとothelo.cに展開され、結果として多重定義になっている

char colorNames[][4 + 1] = { int directions[][2] = { const char* pAlphabets[PLAY_HEIGHT] = { const char* pNumbers[PLAY_WIDTH] = { GAME_INFORMATION gameInformation; GAME_INFORMATION *pGameInfo = &gameInformation; int cells[PLAY_HEIGHT][PLAY_WIDTH];

変数の定義はソースファイルで行うのが一般的です。
3.colorNames[][4 + 1]の配列長が短い
文字コードはutf-8かと思いますが、utf-8は3バイトの場合もあるようなので、[3*2+1]としておいた方がよいみたいいです。

sleep関数ならunistd.hですが、Sleep関数の場合はWindows.hが必要なようです。

#include <Windows.h> // sleep関数が入っているので利用.なぜか<unistd.h>では参照エラーが発生するためこちらを用いる.

投稿2022/06/04 02:17

編集2022/06/04 02:18
Serbonis

総合スコア586

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

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

wealthy_plonker

2022/06/04 09:59

文字コードの性質をよく理解しておらず,「半角だから1バイト,全角だから2バイト」だと固定観念にとらわれていました.ご丁寧に修正案までいただき本当にありがとうございます. なおsleep関数についてですが,当方の環境ではなぜか「include <unistd.h>」では「ソースファイルは開けません "unistd.h"」とのエラーが出てしまうため,苦し紛れにWindows.hの方をインクルードした形になります...何なんだろう...?
guest

0

ベストアンサー

その要因がどこに潜んでいるのかが分かりませんでした.

とりあえずエラーメッセージままでググると結構いろいろひっかかるものです。

致命的なエラーC1090とのことですので、ソースがどうこうではなくVisual Studio側のトラブルなのでしょう。

クリーン/リビルドしてみるとか(すでにdodox86さんが提案されていますが)
PCを再起動してみるとか、
Stack Overflowで検索してみろ(MS公式がそれでいいのか?)
等々ということだそうです。

(追記)
あと、IDEの実行ボタンに頼らず、開発用コマンドプロンプト(VSの時期によって名前は若干かわる)からコマンド打ってコンパイルする、というのもあるか。

投稿2022/06/04 00:31

編集2022/06/04 00:43
thkana

総合スコア7733

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

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

wealthy_plonker

2022/06/04 09:52

みなさんの改善案を順に試していった結果,プロジェクトのクリーン・リビルドをした時点でプログラムが正常に動作したのでthkanaさんをベストアンサーとさせていただきます.(dodox86さんをベストアンサーにできないため) この質問をする前にエラーコードを調べてPC再起動を試してもダメだったので,完全にプログラム自体の問題かと思っていました(SerbonisさんやJimbeさんの指摘されるように問題あるコードではありますが...) みなさん本当にありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問