1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C++でビルドが通らない時のメモ

Last updated at Posted at 2018-06-06

地味に時間とられる

ノリノリで開発してても、いざビルドするとたくさんエラーが出て萎えることあるわね。
なんだか意味が分からないエラーがでてしまって解決まで時間かかることもまぁよくある。
この記事では時間とられたエラーについて、状況と解決方法を書いていく。

全角スペースが入っている

ソースコード中に全角スペースがはいってしまっている。
コメント内ならいいんだけど。
全角スペースを半角スペースに置換しよう。
エディタに表示されるようにしてもよい。
参考:http://www.atmarkit.co.jp/ait/articles/1503/03/news057.html

ソースコードの文字コードがsjis(CP932)の時

sjisにはたとえコメントであっても使ってはいけないダメ文字が存在する。
可能ならUTF-8あたりに変換しておこう。
参考:https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp

インクルードの順番

インクルードするファイルの順番によって、コンパイル時にコンパイラが知らないクラスが出てくる。
そうすると、構文エラーやらがたくさんでてきてしまって、原因の推測も面倒になってくる。
これは、ヘッダファイルをインクルードし合うときにおこりやすい。

class hoge;  //ここでクラスの存在だけ宣言しておくとよい
class piyo{
    piyo(){};
    ~piyo(){};

    void Sethoge(hoge* p);
};

この時、hogeは存在が確認されているだけのふんわりした状態なので
実体としてpiyoのメンバ変数では宣言できないし、
ヘッダ中でhogeのメンバ関数も呼ぶことができない。

実体がない

ヘッダファイルで宣言だけしてあって、実装していない時とか、
ファイルがあって、実装してあっても、cppがビルドの対象に入っていないとか
前者はわかりやすいけど、後者はちょっと迷うかもね

既に宣言されています

こんな感じで、ヘッダにクラス書いてるとき。

# pragma once

class hoge{
    hoge();
    ~hoge();
};

hoge::hoge(){
   //...
}

hoge::~hoge(){
   //...
}

関数の中身はcppを作ってそっちに書くか、こうする

# pragma once

class hoge{
    hoge(){
         //...
    };
    ~hoge(){
         //...
    };
};

セミコロンがない

まぁまぁよくあるやつなので、普通はすぐ気が付く。
だけど、クラスの末尾につけるやつは結構わすれがち。
さらにヘッダに書いてあるクラスだと、インクルード元でエラー出たりするから
余計にわからなくなる。困る。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?