0
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?

AUTOSAR CountdownAdvent Calendar 2022

Day 22

コピペコンパイルエラーあるある, C++ error(9)

Last updated at Posted at 2022-07-03

コピペコンパイルエラーあるある

PDFのソースコードの断片をコピペプログラミングするときのあるある。

12.2.2.3 Operators in expressions [over.match.oper] C++N4910:2022 (181) p325.cpp
https://qiita.com/kaizen_nagoya/items/bdcddbddaefeff7a9c92

改行消滅

p254.cpp
     void m() {
A a, b;
a + b; // operator+(a, b) chosen over int(a) + int(b) }

コピペで改行がなくなることがある。
コメントの後ろに回ると、そのコードもコメントになってしまう。
(){}類は、すぐにコンパイルエラーが出る確率が高い。

bash
p325.cpp:65:10: error: qualified-id in declaration before '(' token
   65 | void B::f() {
      |          ^
p325.cpp:70:9: warning: empty parentheses were disambiguated as a function declaration [-Wvexing-parse]
   70 | int main(){
      |         ^~
p325.cpp:70:9: note: remove parentheses to default-initialize a variable
   70 | int main(){
      |         ^~
      |         --
p325.cpp:70:9: note: or replace parentheses with braces to value-initialize a variable
p325.cpp:70:11: error: a function-definition is not allowed here before '{' token
   70 | int main(){
      |           ^
p325.cpp:73:2: error: expected '}' at end of input
   73 | }
      |  ^
p325.cpp:44:15: note: to match this '{'
   44 |      void m() {
      |      

清書

bash
# astyle < p325.cpp

清書すると、どこの(){}がないか、わかりやすい。

行の途中からずれ

一行の途中から、左側だけをコピーし、
タブの後だけまとめて繋がることがある。

右側がコメントの時には読みにくくなるだけ。

処理の途中の場合はコンパイルエラーになることもあれば、処理違いだけになることもある。

12.4.5 Subscripting [over.sub] C++N4910:2022 (191) p348.cpp

p348.cpp

// Example 1  
  struct X {
       Z operator[](std::initializer_list<int>);
       Z operator[](auto...);
};
X x;
x[{1,2,3}]
x[1,2,3] =
int a[10];
a[{1,2,3}]
a[1,2,3] =
= 7; 7;
= 7; 7;
// OK, meaning x.operator[]({1,2,3}) // OK, meaning x.operator[](1,2,3)
// error: built-in subscript operator // error: built-in subscript operator

こんなエラーになる。

bash
# g++ p348.cpp -std=c++2b -o p348g -I. -Wall
p348.cpp:27:8: error: 'Z' does not name a type
   27 |        Z operator[](std::initializer_list<int>);
      |        ^
p348.cpp:28:8: error: 'Z' does not name a type
   28 |        Z operator[](auto...);
      |        ^
p348.cpp:31:1: error: 'x' does not name a type
   31 | x[{1,2,3}]
      | ^
p348.cpp:31:10: error: expected unqualified-id before ']' token
   31 | x[{1,2,3}]
      |          ^
p348.cpp:34:1: error: 'a' does not name a type
   34 | a[{1,2,3}]
      | ^
p348.cpp:34:10: error: expected unqualified-id before ']' token
   34 | a[{1,2,3}]
      |          ^
p348.cpp:36:6: error: expected unqualified-id before numeric constant
   36 | = 7; 7;
      |      ^
p348.cpp:37:1: error: expected unqualified-id before '=' token
   37 | = 7; 7;
      | ^
p348.cpp:37:6: error: expected unqualified-id before numeric constant
   37 | = 7; 7;
      |      ^

コンパイラ助言

includeファイルが足りないと、g++は助言してくれる。
このincludeファイルを指定しなさいって。

12.5 Built-in operators [over.built] C++N4910:2022 (193) p350.cpp

p350.cpp
// C++N4910 Committee Draft, Standard for Programming Language C++
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf
const char * n4910 = "12.5 Built-in operators [over.built] C++N4910:2022 (193) p350.cpp";
// Debian clang version 14.0.5-++20220610033153+c12386ae247c-
// g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc.
// Edited by Dr. Ogawa Kiyoshi. Compile procedure and results record.
// C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
// https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

#include <iostream>
#include <cstdio>
#include <cstdlib> 
#include <cstring>
#include <cassert>
#include <coroutine>
#include <vector>
#include <complex>
#include <map>
#include <atomic>
#include <unordered_map>
#include <typeinfo>

using namespace std;

// Example 1  
vq T vq T
T & operator++(vq operator++(vq T &, T & operator--(vq operator--(vq T &,
T &); int); T &); int);
T & operator*(T *);
T * operator+(T *);
T operator+(T );
T operator-(T );
T operator~(T );
LR LR LR LR bool bool bool bool bool bool
operator*(L, R); operator/(L, R); operator+(L, R); operator-(L, R); operator==(L, R); operator!=(L, R);
operator<(L, R); operator>(L, R); operator<=(L, R); operator>=(L, R);
std::strong_ordering operator<=>(T, T);
std::partial_ordering operator<=>(L, R);
T* operator+(T*, std::ptrdiff_t); T& operator[](T*, std::ptrdiff_t); T* operator-(T*, std::ptrdiff_t); T* operator+(std::ptrdiff_t, T*); T& operator[](std::ptrdiff_t, T*);
bool operator==(T, T); bool operator!=(T, T); bool operator<(T, T); bool operator>(T, T); bool operator<=(T, T); bool operator>=(T, T); R operator<=>(T, T);
bool operator==(T, T); bool operator!=(T, T);
LR LR LR LR L
operator%(L, R); operator&(L, R); operator^(L, R); operator|(L, R); operator<<(L, R);
L operator>>(L, R);
vq L& vq L& vq L& vq L& vq L&
operator=(vq operator*=(vq operator/=(vq operator+=(vq operator-=(vq
L &, L&,
L&, L&, L&,
R ); R);
R); R); R);
vq T & operator=(vq T &, T );
T*vq& operator+=(T*vq&, std::ptrdiff_t); T*vq& operator-=(T*vq&, std::ptrdiff_t);
vq L& vq L& vq L& vq L& vq L& vq L&
operator%=(vq operator<<=(vq operator>>=(vq operator&=(vq operator^=(vq operator|=(vq
L &, L &,
L &, L&,
L&, L&,
R ); R );
R ); R);
R); R);
     bool    operator!(bool);
     bool    operator&&(bool, bool);
     bool    operator||(bool, bool);
T operator?:(bool, T, T);
int main(){
  cout  <<  n4910 << endl;
  return EXIT_SUCCESS;
}

こんな感じ

bash
$ g++ p350.cpp -std=c++2b -o p350g -I. -Wall
...
p350.cpp:13:6: error: 'strong_ordering' in namespace 'std' does not name a type
   13 | std::strong_ordering operator<=>(T, T);
      |      ^~~~~~~~~~~~~~~
p350.cpp:1:1: note: 'std::strong_ordering' is defined in header '<compare>'; did you forget to '#include <compare>'?
  +++ |+#include <compare>
    1 | // Example 1

...
p350.cpp:43:10: error: 'EXIT_SUCCESS' was not declared in this scope
   43 |   return EXIT_SUCCESS;
      |          ^~~~~~~~~~~~
p350.cpp:1:1: note: 'EXIT_SUCCESS' is defined in header '<cstdlib>'; did you forget to '#include <cstdlib>'?
  +++ |+#include <cstdlib>
    1 | // Example 1

参考資料(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

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.01 初稿  20240504

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

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

Thank you very much for reading to the last sentence.

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

0
1
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
0
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?