地味に時間とられる
ノリノリで開発してても、いざビルドするとたくさんエラーが出て萎えることあるわね。
なんだか意味が分からないエラーがでてしまって解決まで時間かかることもまぁよくある。
この記事では時間とられたエラーについて、状況と解決方法を書いていく。
全角スペースが入っている
ソースコード中に全角スペースがはいってしまっている。
コメント内ならいいんだけど。
全角スペースを半角スペースに置換しよう。
エディタに表示されるようにしてもよい。
参考: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(){
//...
};
};
セミコロンがない
まぁまぁよくあるやつなので、普通はすぐ気が付く。
だけど、クラスの末尾につけるやつは結構わすれがち。
さらにヘッダに書いてあるクラスだと、インクルード元でエラー出たりするから
余計にわからなくなる。困る。