2017-12-14 10 views
-1

클래스 템플릿을 사용하여 LinkedLists를 구현하려고합니다. 프로그램이 입력 할 때 LinkedList 객체와 변수 x (삽입 또는 삭제할 요소)의 유형을 결정하도록합니다. 나는 다음과 같은 코드를 시도하지만 라인 1에 오류를 제공하고유형을 동적으로 알 수있는 템플릿 클래스 객체에서 auto 키워드를 사용할 수 있습니까? 그리고 이니셜 라이저없이 auto 키워드를 사용할 수 없습니까?

#include<iostream> 
using namespace std; 

template <class dt> 
class LinkedList{ 
    dt element; 
    LinkedList* next; 
public: 
    LinkedList():next(NULL){} 
    // Basic Linked List Functions and their definitions 
}; 

int main(){ 
int opt; 
auto x;         //.....1 
LinkedList<auto> LL;      //.....2 

do{ 
cout<<"\nEnter the Option number to perform:1--> Push(x)\n2--> Push(x,n)3--> Pop()\n4--> Pop(n)\n5--> Pop(x)\n6--> Exit"; 
cin>>opt; 
switch(opt){ 
    case 1: cout<<"\nEnter x: "; 
      cin>>x; 
      LL.Push(x); 
      break; 
    case 2: cout<<"\nEnter x and n"; 
      cin>>x>>n; 
      LL.Push(x,n); 
      break; 
    case 3: LL.Pop(); 
      break; 
    case 4: cout<<"\nEnter n"; 
      cin>>n; 
      LL.Pop(n); 
      break; 
    case 5: cout<<"\nEnter x"; 
      cin>>x; 
      LL.Pop(x); 
} 
LL.Print();    
}while(opt<5); 
return 0; 
} 
+0

'x'의 유형은 무엇입니까? '자동'이 적절한 유형이라고 생각할 수도 있지만, 그렇지 않습니다. 컴파일러가 적절한 유형을 추론 할 것을 단순히 요구합니다. –

+0

그 중 아무 것도 작동하지 않습니다. 'C++ '은 컴파일 할 때 타입을 알아야한다. – Galik

답변

1

2. 내가 프로그램에서 LinkedList의 객체의 유형과 변수 x (삽입 또는 삭제되는 요소)를 결정하려면 입력 시간.

그건 불가능합니다. C++에서는 컴파일시 모든 타입을 알아야합니다.

auto x; 

은 유효하지 않습니다. 변수가 선언 시점에서 초기화되는 경우에만 auto을 사용하여 컴파일시 유형을 추론 할 수 있습니다.

auto x = 10; // Type of x is deduced to be int at compile time. 
auto y = 10.5; // Type of y is deduced to be double at compile time. 
1

'자동'인 경우에도 C++는 정적으로 입력됩니다. 즉, auto는 프로그래머가 변수 유형을 알거나 결정할 필요가 없기 때문에 컴파일러는 정확한 유형을 결정할 수 있어야합니다.

함수 본문에서 'auto'변수에는 초기화 매개 변수가 있어야하며 컴파일러는 전달 된 인수에서 유형을 결정할 수 있어야하고 컴파일러에서 반환 유형으로 사용할 때이 매개 변수를 사용해야합니다. 모든 return 문을 동일한 유형을 반환하는 것으로 처리 할 수 ​​있습니다.