1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AUTOSAR CountdownAdvent Calendar 2022

Day 25
この記事誰得? 私しか得しないニッチな技術で記事投稿!

no template named, CEDD(Compile Error(64) Driven Design) 8回直しコンパイル. C++(34) coding(120)

Last updated at Posted at 2018-05-04

プログラミング言語教育の母語方式を提唱

プログラミング言語教育

のXYZ
https://qiita.com/kaizen_nagoya/items/1950c5810fb5c0b07be4
youtube
https://www.youtube.com/watch?v=He1_tg4px-w&t=486s

1 コンパイラそのものを写経する
2 カーネルソースを写経する
3 本を10冊以上コンパイルする
4 1行づつ註釈(comment)にして編纂(compile or assemble)する

という方法を実践。

1は、PascalとC

2は、アセンブラとC

3は、アセンブラ、C, C++, JAVA
例:
C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

4は、アセンブラとC
例:
VZエディタ移植に当たって実施したことと成果
https://qiita.com/kaizen_nagoya/items/5551be98dcbed8f41949

現状、アセンブラとCには強いが、C++, JAVAには弱いプログラマ。

C++でTOPPERS/SSPを記述し直すことを検討。

CPU周りの記述をC++ Templateで記述できないかを検討。

コンパイラの勉強として、clang/clang++(LLVM)に馴染もうと。

別に、C++2003, C++2011, C++2017と言語規格の文書を辿る。

コンパイルエラーを辿って、言語学習になったか確認。

1 original

C++N4741(11)6.3.9 Template parameter scope [basic.scope.temp]p34
https://qiita.com/kaizen_nagoya/items/271138ed66f0bee8444c

p34.cpp
template<class T> class X : public Array<T> { /* ... */ };

全文は上記サイト

clang++

p34.cpp:26:36: error: no template named 'Array'; did you mean 'array'?
template<class T> class X : public Array<T> { /* ... */ };
                                   ^~~~~
                                   array
/usr/local/Cellar/llvm/6.0.0/include/c++/v1/__tuple:223:64: note: 'array' declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TEMPLATE_VIS array;
                                                               ^
p34.cpp:26:36: error: too few template arguments for class template 'array'
template<class T> class X : public Array<T> { /* ... */ };
                                   ^
/usr/local/Cellar/llvm/6.0.0/include/c++/v1/__tuple:223:64: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TEMPLATE_VIS array;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                             ^

2. #define Array array

Arrayをarrayに定義してみる。

clang++
								   p34.cpp:26:36: error: too few template arguments for class template 'array'
template<class T> class X : public Array<T> { /* ... */ };
                                   ^
p34.cpp:12:15: note: expanded from macro 'Array'
#define Array array
              ^
/usr/local/Cellar/llvm/6.0.0/include/c++/v1/__tuple:223:64: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TEMPLATE_VIS array;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                             ^

3. include <array>

arrayをincludeする。

clang++
p34.cpp:26:36: error: too few template arguments for class template 'array'
template<class T> class X : public Array<T> { /* ... */ };
                                   ^
p34.cpp:12:15: note: expanded from macro 'Array'
#define Array array
              ^
/usr/local/Cellar/llvm/6.0.0/include/c++/v1/array:121:29: note: template is declared here
struct _LIBCPP_TEMPLATE_VIS array
                            ^

4. <T,i>にしてみる

2つ要素が要るらしい。なんでもいいから書いてみた。

clang++
p34d.cpp:26:44: error: use of undeclared identifier 'i'
template<class T> class X : public Array<T,i> { /* ... */ };
                                           ^
p34d.cpp:26:47: error: expected class name
template<class T> class X : public Array<T,i> { /* ... */ };
                                              ^
2 errors generated.

5. <T,size_t>にしてみる

宣言していない識別子はダメらしい。

clang++
p34a.cpp:26:44: error: template argument for non-type template parameter must be an expression
template<class T> class X : public Array<T,size_t> { /* ... */ };
                                           ^~~~~~
/usr/local/Cellar/llvm/6.0.0/include/c++/v1/array:120:29: note: template parameter is declared here
template <class _Tp, size_t _Size>
                            ^
1 error generated.

6. <T,X>にしてみる

expressionじゃないと駄目だって。

clang++
p34.cpp:26:44: error: template argument for non-type template parameter must be an expression
template<class T> class X : public Array<T,X> { /* ... */ };
                                           ^
/usr/local/Cellar/llvm/6.0.0/include/c++/v1/array:120:29: note: template parameter is declared here
template <class _Tp, size_t _Size>
                            ^

ネットで検索
「Template argument for non-type parameter must be an expression」
https://stackoverflow.com/questions/37880517/template-argument-for-non-type-parameter-must-be-an-expression

7. constexpr size_t sz;

constexprすればいいのか?

clang++
p34.cpp:26:18: error: default initialization of an object of const type 'const size_t' (aka 'const unsigned long')
constexpr size_t sz;
                 ^
                 = 0

8 sz =0;

宣言で値が入っていないと駄目らしい。

clang++
$ ../cla.sh p34a
$ clang++ p34a.cpp -std=c++2a -Wall
C++N4741(11)6.3.9 Template parameter scope [basic.scope.temp]p34a.cpp

コンパイルエラーがなくなりました。

C++N4741(11)6.3.9 Template parameter scope [basic.scope.temp]p34
https://qiita.com/kaizen_nagoya/items/271138ed66f0bee8444c
p34a.cppがコンパイルエラーなし版

これが言語学習の経路として妥当かどうかは問わない。
母語は、意味のある言葉の繰り返しから生まれるとは限らない。
とにかく、言葉のやり取りだけでコンパイルエラーのないプログラムにたどり着けたことだけを記録。

言語学習は、目的が何かで任意の道のりで良い。

#参考文献(reference)

初学者がハマったエラーをまとめてみた【プログラミング学習107日目】
https://qiita.com/fuku_tech/items/0d4f2546cb4ee045c7f7

自己資料(self reference)

初めての CEDD(Compile Error Driven Design) 8回直してコンパイル。
https://qiita.com/kaizen_nagoya/items/9494236aa1753f3fd1e1

コンパイルエラーを記録するとよい理由7つ
https://qiita.com/kaizen_nagoya/items/85c0e92b206883140e89

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a

Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d

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
[C][C++]の国際規格案の例題をコンパイルするときの課題7つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

docker gnu(gcc/g++) and llvm(clang/clang++)
https://qiita.com/drafts/059874ea39c4de64c0f7

C++ Support(0) 
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Ethernet 記事一覧 Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網(Wi-Fi)空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎 OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え(0)一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

TOPPERSまとめ #名古屋のIoTは名古屋のOSで
https://qiita.com/kaizen_nagoya/items/9026c049cb0309b9d451

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

Qiita-dockerお宝鑑定団
https://qiita.com/kaizen_nagoya/items/509e125263559b5aed5b

The C++ Standard Library: clang++とg++でコンパイルしてみた(まとめ):14件
https://qiita.com/kaizen_nagoya/items/9bdfaa392443d13e5759

C++17 - The Complete Guide clang++とg++でコンパイルしてみた(まとめ):4件
https://qiita.com/kaizen_nagoya/items/c000f307e642990781e1

C++N3242, 2011, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010

C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

プログラマによる、プログラマのための、統計と確率のプログラミングとその後 統計と確率一覧(0)
https://qiita.com/kaizen_nagoya/items/6e9897eb64126876690

Ethernet 記事一覧 Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網(Wi-Fi)空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

C++ Support(0) 
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

coding (101) 一覧を作成し始めた。omake:最近のQiitaで表示しない5つの事象
https://qiita.com/kaizen_nagoya/items/20667f09f19598aedb68

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え(0)一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

小川清最終講義、小川清最終講義(再)計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
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 初稿 20180504
ver. 0.11 空行を追記し表示訂正、URL3つ追記 20180505
ver. 0.12 参考文献追記 20180616
ver. 0.13 参考資料、はてなブックマーク追記 20190120
ver. 0.14 add URL 20240508

最後までおよみいただきありがとう4ざいました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

このエントリーをはてなブックマークに追加
http://b.hatena.ne.jp/guide/bbutton

1
3
0

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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?