質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

29605閲覧

C++で発生した「expected unqualified-id before ...」というエラーについて

HeyCube

総合スコア7

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/12/18 10:51

こんにちは。
私は今C++を勉強中なのですが、その一環として試しに二分ヒープを作成したところ、エラーが発生して詰まってしまいました。
エラーそのものの対処というよりは、その発生原因を知りたく質問致しました。

###発生している問題・エラーメッセージ
以下が発生したエラーです。

/home/...:6:5: error: expected unqualified-id before ‘delete’ int delete(int binaryHeap[], int value, int nodeNum); ^ /home/...:50:5: error: expected unqualified-id before ‘delete’ int delete(int binaryHeap[], int value, int nodeNum) ^

###該当のソースコード
以下がソースコードです。

C++

1#include <iostream> 2using namespace std; 3 4void breadthFirstSearch(int binaryTree[], int nodeNum); 5int insert(int binaryHeap[], int value, int nodeNum); 6int delete(int binaryHeap[], int value, int nodeNum); 7int search(int binaryHeap[], int value, int nodeNum, int index); 8 9void breadthFirstSearch(int binaryTree[], int nodeNum) 10{ 11 for (int i = 0; i < nodeNum; i++) { 12 cout << binaryTree[i] << " "; 13 } 14 cout << endl; 15} 16 17int insert(int binaryHeap[], int value, int nodeNum) 18{ 19 if (search(binaryHeap, value, nodeNum, 0) != -1) { 20 return 0; 21 } 22 binaryHeap[nodeNum] = value; 23 int i = nodeNum; 24 25 while (i > 0) { 26 if (binaryHeap[i] < binaryHeap[(i - 1) / 2]) { 27 binaryHeap[i] = binaryHeap[(i - 1) / 2]; 28 binaryHeap[(i - 1) / 2] = value; 29 i = (i - 1) / 2; 30 } 31 else { 32 return 1; 33 } 34 } 35 36 return 1; 37} 38 39int delete(int binaryHeap[], int value, int nodeNum) 40{ 41 int index = search(binaryHeap, value, nodeNum, 0); 42 if (index == -1) { 43 return 0; 44 } 45 46 binaryHeap[index] = binaryHeap[nodeNum - 1]; 47 while (2 * index + 1 < nodeNum - 1) { 48 int childIndex, childValue; 49 50 if (2 * index + 1 == nodeNum - 2) { 51 childIndex = 2 * index + 1; 52 childValue = binaryHeap[2 * index + 1]; 53 } 54 else { 55 if (binaryHeap[2 * index + 1] <= binaryHeap[2 * index + 2]) { 56 childIndex = 2 * index + 1; 57 childValue = binaryHeap[2 * index + 1]; 58 } 59 else { 60 childIndex = 2 * index + 2; 61 childValue = binaryHeap[2 * index + 2]; 62 } 63 } 64 65 if (binaryHeap[index] > childValue) { 66 binaryHeap[childIndex] = binaryHeap[index]; 67 binaryHeap[index] = childValue; 68 index = childIndex; 69 } 70 else { 71 return 1; 72 } 73 } 74 75 return 1; 76} 77 78int search(int binaryHeap[], int value, int nodeNum, int index) 79{ 80 if (nodeNum == 0) { 81 return -1; 82 } 83 84 if (binaryHeap[index] == value) { 85 return index; 86 } 87 88 else if (binaryHeap[index] > value) { 89 return -1; 90 } 91 92 else { 93 int leftResult = -1, rightResult = -1; 94 if (2 * index + 1 < nodeNum) { 95 leftResult = search(binaryHeap, value, nodeNum, 2 * index + 1); 96 } 97 if (2 * index + 2 < nodeNum) { 98 rightResult = search(binaryHeap, value, nodeNum, 2 * index + 2); 99 } 100 101 if (leftResult == -1 && rightResult == -1) { 102 return -1; 103 } 104 else if (leftResult != -1) { 105 return leftResult; 106 } 107 else { 108 return rightResult; 109 } 110 } 111}

###試したこと
自力で調べたところ、deleteという関数の名前が悪いのでは、という予測を致しました。
そこで、hogeという名前に変えたところ、件のエラーは発生しなくなりました。
ただ、結局何が原因だったのかが分かりません。
もし原因をご存知の方がいましたら、お教え下さい。

###補足
以下が実行環境です。
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0
Linux Mint 18 Sarah

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

「deleteという関数の名前が悪い」が完全に正解です。
deleteはC++言語の予約語です(new/deleteのdeleteです)ので、ユーザが定義してはいけません。
名前を変更するのは正しい対策です。

投稿2016/12/18 10:55

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「delete」はC++では予約語です。

投稿2016/12/18 10:54

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問