目的
C++に限らず、コンパイルエラーがたくさん出るとめげる。
根本原因のエラーと、それに付属する関連エラーがあり、根本原因エラーさえ取れば、みんなきれいさっぱりなくなることがある。
複数のファイルにまたがるエラーは、相互に影響があり、どちらを直すとより効率的かを判断できないと無駄な作業が発生するかもしれない。
効率的にコンパイルエラーを取る方法を探るため、コンパイルエラー情報とその際の対応方法を収集する。
成果
コンパイルエラーとその時の条件に従い、すぐにコンパイルエラーが取れるようになる。
コンパイルエラーが取れれば、printf(cout)デバッグができるかもしれない。
関連
悲しいのはprintf(cout)デバッグをしようとすると、コンパイルエラーが出る時。
printf(cout)デバッグをしてもコンパイルエラーが出ない方法も順次追記したい。
複雑な構造を持った新たなclassは、直接coutしようとせず、よく知った必要な型に変換して出力するのも手かも。
castしようとすると、castのコンパイルエラーが出るかもしれない。castでコンパイルエラーが出ない方法を知っているとよい。
(1) does not name a type
1.1 error: ‘Result’ does not name a type
上記はg++の場合。
clang++は
error: unknown type name 'Result'; did you mean 'Foo::Result'?
解決:「クラス名::」を付加する。
1.2 error: 'byte' does not name a type
web コンパイラでの複数ファイルの取り扱い等
https://japan.renesasrulz.com/gr_user_forum_japanese/f/web_compiler/547/web/2922?pi5348=8&pi5351=1
解決:設計環境でコンパイル対象ファイルの指定をする。
1.3 does not name a type
C++,エラー: ○○ does not name a type
http://chowe.at.webry.info/200612/article_8.html
http://s.webry.info/sp/chowe.at.webry.info/200612/article_8.html
「互いのヘッダファイルを相互にincludeしていた」
解決:ヘッダファイルの最初に、
#ifndef HEADER_HPP
#define HEADER_HPP
//ヘッダファイルの中身
#endif
という、それぞれにファイル名固有の定数をifndefのあとで宣言していれば、相互にincludeしても悪さはしないかも。
1.4 "string" does not name a type
[C++] Includeしたはずのクラスが使えない? ---
http://debuggingasusual.blogspot.jp/2011/11/does-not-name-type.html
「解決:4行目のstring をstd::stringにする。
あるいは、using namespace std;を2行目に書く。」
1.5 'index' does not name a type
autoがエラーになる
https://dixq.net/forum/viewtopic.php?t=10114
解決:--std=c++0xを追記
「g++ --std=c++0x ファイル名 」
1.6 error: ‘test.hpp’ in namespace ‘dirA’ does not name a type
includeが出来ない訳とは?
https://oshiete.goo.ne.jp/qa/4606701.html
解決:
「「dirAの上のディレクトリ」に対してinclude用のパスが設定されている必要があります」
1.7 does not name a type:Arduino
Arduinoエラー:型の名前を指定していませんか?
~~ https://code.i-harness.com/ja/q/11c5ac9~~
「#include 」
includeしてなかった?
リンク切れになっていた。
does not name a type Arduino で検索した。
1.8 does not name a type: C++
C++。++を語る有名言語はC++一つしかないので、「ぷらぷら」と訓む。
http://neetance.x.fc2.com/TO/guide/create/Cpp.html
リンク切れになっていた。
does not name a type C++ で検索した。
解決:
「<具体例>
・その順以前に定義してない
・プロトタイプ宣言忘れ
・ヘッダのインクルード漏れ
・C++なのに相互参照が可能だと思い込んでる」
1.9 someheader.h:99:13: error: ‘ptrdiff_t’ does not name a type
gcc (g++) 4.9でGNU MPをコンパイルする時のメモ
https://qiita.com/tell/items/8a4cf5d233b637ae5a09
解決: <cstddef>をinclude
「A workaround until libraries get updated is to include or before any headers from that library.」
1.10 error: 'u_char' does not name a type
Arduinoで作る簡易ネットワーク百葉箱について
http://www.senio.co.jp/bbs/viewtopic.php?f=7&t=104
解決:utility/types.hがどこにあるか探す。
なければ入れる。
あれば、そのフォルダをinclude対象にする
1.11 error: 'T' does not name a type
C++N4741 (50)8.5.1.9 Static cast [expr.static.cast]p105
https://qiita.com/kaizen_nagoya/items/e76c21417f6e21c1485e
解決
yumetodo さんからのご指導
https://teratail.com/questions/126548#reply-192709
「template<typename T>」を入れ、他は関数の中に記述。
解決(resolution list)
include系
includeファイルの指定方法間違い
ヘッダファイルが、includeフォルダにあれば<>を使い、CPPファイルと同じカレントフォルダにあれば” ”を使う。
コンパイル時に -Iで該当フォルダを指定しても良い。
MakefileなどにINCLUDE記述をする。
この項は書きかけです。順次追記します。
include行の置き場所間違い
includeファイルには、呼び出す順番によって振る舞いが異なる場合があります。あるヘッダファイルより、先に呼び出す必要がある場合があります。
ifndefの記述の有無
各行にifndef文があルものであれば、必要そうなヘッダファイルはinclude記述をしておくと良い。自分が記述したヘッダファイルにも、必ずifndef文はいれておく。
変数の宣言
プロトタイプ宣言を使う前にする。
定義を使う前にする。
Templateの場合には、例えばtemplate<typename T>
Template
関数の中で記述する事項と関数の外で記述する事項の区分
課題(agenda)
宣言と定義を同時にするかどうか。
宣言と定義が別ファイルにあっても良いかどうか。
参考資料(reference)
cpprefjp - C++日本語リファレンス
https://cpprefjp.github.io/
コンパイラの実装状況
https://cpprefjp.github.io/implementation-status.html
typedef は C++11 ではオワコン
https://qiita.com/Linda_pp/items/44a67c64c14cba00eef1
C99からC++14を駆け抜けるC++講座
https://qiita.com/yumetodo/items/e49a673afd9a3ecb81a8
自己参照(self reference)
コピペコンパイルエラーあるある
https://qiita.com/kaizen_nagoya/items/29c832de9d762aed2761
C++ Error Message Collection(1)does not name a type, 11 articles
https://qiita.com/kaizen_nagoya/items/acb9f1a9b5aad6df06bd
dockerにclang
https://qiita.com/kaizen_nagoya/items/8829ffeee397eda50e80
docker gnu(gcc/g++) and llvm(clang/clang++)
https://qiita.com/drafts/059874ea39c4de64c0f7
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
Compare the contents of C++N4910:2022, C++N4741:2018 and C++N4606:2015
https://qiita.com/kaizen_nagoya/items/483246d40f98abff7ded
C++ sample list
https://qiita.com/kaizen_nagoya/items/54ad75b73825b7c04f86
clang++, g++コンパイルエラー方針の違いの例
https://qiita.com/kaizen_nagoya/items/ea6e5009fe126d270a82
astyle 使ってみた
https://qiita.com/kaizen_nagoya/items/3c9a87a781d53a1a23f3
C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standardのコード断片をコンパイルするためにしていること
https://qiita.com/kaizen_nagoya/items/a8d7ee2f2e29e76c19c1
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
Clang/Clang++(LLVM) gcc/g++(GNU) コンパイラ警告等比較
https://qiita.com/kaizen_nagoya/items/9a82b958cc3aeef0403f
C++2003とC++2017でコンパイルエラーになるならない事例集
https://qiita.com/kaizen_nagoya/items/a13ea3823441c430edff
Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d
cpprefjpのdecltypeをコンパイル試験
https://qiita.com/kaizen_nagoya/items/090909af702f0d5d8a67
MISRA C++ 5-0-16
https://qiita.com/kaizen_nagoya/items/7df2d4e05db724752a74
C++ Templates Part1 BASICS Chapter 3. Class Templates 3.2 Use of Class Template Stack stack1test.cpp
https://qiita.com/kaizen_nagoya/items/cd5fc49106fad5a4e9ed
ISO/IEC TS 17961:2013 C Secure Coding Rules(1) All list(to be confirmed)
https://qiita.com/kaizen_nagoya/items/54e056195c4f11b850a1
C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a
C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9
'wchar.h' file not found で困った clang++ macOS
https://qiita.com/kaizen_nagoya/items/de15cd46d657517fac11
Open POSIX Test Suiteの使い方を調べはじめました
https://qiita.com/kaizen_nagoya/items/644d5e407f5faf96e6dc
MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb
どうやって MISRA Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00
MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9
「C++完全理解ガイド」の同意できること上位10
https://qiita.com/kaizen_nagoya/items/aa5744e0c4a8618c7671
C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91
C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010
C++N4606, 2016Working Draft 2016, ISO/IEC 14882,符号断片編纂一覧(example code compile list)
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/
C++N3242, 2011 sample code compile list on clang++ and g++
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
文書履歴(document history)
ver. 0.10 初稿 20180516
ver. 0.11 課題を追記 20180516
ver. 0.20 Templateを追記 20180518
ver. 0.21 項目番号変更 20180520
ver. 0.22 C++N4910:2022 追記 20220617
ver. 0.23 参考文献追記 202220716
ver. 0.24 リンク切れを2箇所補正 20221021
ver. 0.25 ありがとう追記 20230413
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.