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

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

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

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

C++

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

Q&A

1回答

2968閲覧

c++ 双方向連結リストのレポート

退会済みユーザー

退会済みユーザー

総合スコア0

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

C++

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

0グッド

0クリップ

投稿2015/07/23 16:01

どこが間違えているか分かりません。
visual c++ 2010
エラー文は
1>------ ビルド開始: プロジェクト: report12, 構成: Debug Win32 ------
1> report12.cpp
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(36): error C2955: 'Node' : クラス テンプレート を使用するには テンプレート 引数リストが必要です
1> c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(4) : 'Node' の宣言を確認してください。
1> c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(35): クラス テンプレート のメンバー関数 'Node<T> LinkedList<T>::insert_first(T)' のコンパイル中
1> with
1> [
1> T=int
1> ]
1> c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(81) : コンパイルされたクラスの テンプレート のインスタンス化 'LinkedList<T>' の参照を確認してください
1> with
1> [
1> T=int
1> ]
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(36): error C2514: 'Node' : クラスにコンストラクターが定義されていません。
1> c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(4) : 'Node' の宣言を確認してください。
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(37): error C2440: '初期化中' : 'Node<T> ' から 'Node ' に変換できません。
1> with
1> [
1> T=int
1> ]
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(38): error C2662: 'Node<T>::setPrev' : 'Node' から 'Node<T> &' へ 'this' ポインターを変換できません。
1> 理由: 'Node' から 'Node<T>' へは変換できません。
1> 変換には 2 番目のユーザー定義変換演算子またはコンストラクターが必要です。
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(39): error C2662: 'Node<T>::setNext' : 'Node' から 'Node<T> &' へ 'this' ポインターを変換できません。
1> 理由: 'Node' から 'Node<T>' へは変換できません。
1> 変換には 2 番目のユーザー定義変換演算子またはコンストラクターが必要です。
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(40): error C2662: 'Node<T>::setPrev' : 'Node' から 'Node<T> &' へ 'this' ポインターを変換できません。
1> 理由: 'Node' から 'Node<T>' へは変換できません。
1> 変換には 2 番目のユーザー定義変換演算子またはコンストラクターが必要です。
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(41): error C2664: 'Node<T>::setNext' : 1 番目の引数を 'Node ' から 'Node<T> ' に変換できません。(新しい機能 ; ヘルプを参照)
1> with
1> [
1> T=int
1> ]
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\users\user\documents\visual studio 2010\projects\report12\report12\report12.cpp(42): error C2440: 'return' : 'Node ' から 'Node<T> ' に変換できません。
1> with
1> [
1> T=int
1> ]
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
本文は- リスト
#include<iostream>
using namespace std;
template <class T>
class Node{
private:
int data;
Node<T>
next;
public:
Node(T x);
void setData(T x);
void setNext(Node
x);
void setPrev(Node
x);//
Node
getNext();
Node
getPrev();//
T getData();
};
template <class T>
class LinkedList{
private:
Node<T>
head;
Node<T>
tail;
public:
LinkedList();//コンストラクタ
~LinkedList();//デストラクタ
Node<T>* append(T x);
Node<T>* insert(Node<T>* node,T x){
Node* p=new Node(x);
Node* tmp=node->getNext();
p->setNext(tmp);
p->setPrev(node);
node->setNext(p);
tmp->setPrev(p);
return p;
}
Node<T>* insert_first(T x){
Node* p=new Node(x);
Node* tmp=head->getNext();
p->setPrev(head);
p->setNext(tmp);
tmp->setPrev(p);
head->setNext(p);
return p;
}
Node<T>* insert_last(T x){
Node* p=new Node(x);
Node* tmp=tail->getPrev();
p->setNext(tail);
p->setPrev(tmp);
tmp->setNext(p);
head->setPrev(p);
return p;
}
Node<T>* getFirst(){
Node* p=head;
p->setNext(head);
return p;
}
Node<T>* getLast(){
Node* p=head;
p->setPrev(tail);
return p;
}
bool isFirst(Node<T>* node){
if(head->getNext()==tail){
return true;
}
else{
return false;
}
}
bool isLast(Node<T>* node){
if(tail->getPrev()==head){
return true;
}
else{
return false;
}
}
};
int main(){
LinkedList<int> l;
l.insert_first(10);
l.insert_first(20);
l.insert_first(30);
cout << "最初から表示" << endl;
Node<int>* p=l.getFirst();
while(!l.isLast(p)){
cout << p->getData() << endl;
p=p->getNext();
}
l.insert_last(100);
l.insert_last(200);
l.insert_last(300);
cout << "最後から表示" << endl;
p=l.getLast();
while(!l.isFirst(p)){
cout << p->getData() << endl;
p=p->getPrev();
}
return 0;
}

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

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

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

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

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

guest

回答1

0

C2955: 'Node' : クラス テンプレート を使用するには テンプレート 引数リストが必要です

LinkedList クラスの下記のような部分ですが、

Node* p=new Node(x); Node* tmp=node->getNext();

このようにする必要があります。

Node<T>* p=new Node<T>(x); Node<T>* tmp=node->getNext();

作成途中?なのかどうか判りませんが、↑だけではまだビルドは通らなさそうですが、ひとまず↑の修正で今のコンパイルエラーは解消すると思います。

投稿2015/07/23 16:39

ngyuki

総合スコア4514

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問