2012-04-03 83 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 2012-04-03 05:07:16

回答

3

您的错误是由包含不正确的标题引起的。取而代之的

#include <memory.h> 

你应该写

#include <memory> 

此外,还有在你的类定义更严重的错误,因为你不能用这种方式初始化类成员:

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

你有以单独地在构造函数中声明它并初始化:

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(new int); 
}; 

您需要声明这样的成员,并在构造函数初始化数据成员:

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