2012-04-03 2 views
1

작은 응용 프로그램을 작성하려고하는데 auto_ptr을 사용하여 컴파일 오류가 발생했습니다.ISO C++에서 유형이없는 'auto_ptr'선언을 금지합니다.

내가 만든 클래스로 스마트 포인터를 만드는 것이 원래 피곤했지만 int 유형의 스마트 포인터를 만들면 다른 오류가 발생해야하므로 동일한 오류가 발생합니다. 나는 here. 주어진 예제를 따르고 있었다.

나는 이것에 대한 답이 나 자신을 때리는 결과가 될 것 같은 느낌이 들었다.

이 파일 맨 아래에 스마트 포인터를 선언합니다.

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <memory.h> 
#include <QMainWindow> 
#include "dose_calac.h" 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private slots: 
    /* 
    Some QT stuff here, removed for clarity/size... 
    */ 

private: 
    Ui::MainWindow *ui; 

    /* 
     Object for storage of data and calculation of DOSE index score. 
    */ 

    std::auto_ptr<int> pdoseIn(new int); // A simple set case, but sill produces an error!?! 

    std::auto_ptr<DOSE_Calac> pdoseIn(new DOSE_Calac); // Original code, error found here at first. 
}; 

#endif // MAINWINDOW_H 

이것은 내 수업 인 dose_calac.h입니다.

#ifndef DOSE_CALAC_H 
#define DOSE_CALAC_H 

class DOSE_Calac 
{ 
public: 
// constructor 
    DOSE_Calac(); 
// set and get functions live here, removed for clarity/size. 

// function for caulating DOSE indexpoints 
    int CalcDOSEPoints(); 
private: 
    unsigned int dyspnoeaScale; 
    unsigned int fev1; 
    bool smoker; 
    unsigned int anualExacerbations; 
    unsigned int doseIndexPoints; 

}; 

#endif // DOSE_CALAC_H 

감사의 마음을 표하는 어떤 도움이나 제안.

+3

사이드 노트 :'auto_ptr'은 C++ 11에서 사용되지 않습니다. – iammilind

답변

3

:

class MainWindow 
{ 
    std::auto_ptr<int> pdoseIn(new int); 
}; 

당신은이 같은 멤버를 선언하고 생성자에서 데이터 멤버를 초기화해야 잘못된 헤더를 포함하여 오류가 발생했습니다.

std::auto_ptr<int> pdoseIn(new int); 

당신은이 :

#include <memory.h> 

당신은 또한

#include <memory> 

작성해야 대신에이 방법으로 클래스 멤버를 초기화 할 수 없기 때문에, 클래스 정의에 더 심각한 실수는,이 별도로 선언하고 생성자에서 초기화하십시오.

std::auto_ptr<int> pdoseIn; 
MainWindow() 
    : pdoseIn(new int) 
{} 
2

클래스 멤버 변수를 초기화 할 수 없으므로 std::auto_ptr<int> a;을 클래스 선언에 정의한 다음 a(new int)을 사용하여 ctor에서 초기화해야합니다.

2

이 같은 클래스 선언 내에서 데이터 멤버를 초기화 할 수 없습니다 :

class MainWindow 
{ 
    std::auto_ptr<int> pdoseIn; 
    MainWindow() 
     : pdoseIn(new int) 
    { 
    } 
}; 
관련 문제