2013-01-24 60 views
0

改變時崩潰這裏是我的腳本:QT試圖將一個字符串從一個類

void FileOperations::SetInputFile(QString x){ 
    InputFilename=x.toStdString(); 
} 
void FileOperations::SetOutputFile(QString x){ 
    OutputFilename=x.toStdString(); 
} 

第一個(SetInputFile)試圖查找inputfilename設置爲x時崩潰。 第二個工作正常。

下面是我從改變這兩個字符串類:

class FileOperations 
{ 
public: 
    void SetInputFile(QString x); 
    void SetOutputFile(QString x); 
private: 
    string InputFilename; 
    string OutputFilename; 
}; 

正如你所看到的,「查找inputfilename」和「OutputFilename」是相同的,它們的功能幾乎是相同的也。 我嘗試將字符串更改爲不同的名稱,但它仍然崩潰。

後崩潰我可以按調試,並查看在Microsoft Visual Studio 2010中的錯誤,這裏是崩潰信息:

msvcr100d.dll的operator delete(void *的pUserData)線52個+ 0x3字節C++ ShitLEncoder.exe!std :: allocator :: deallocate(char * _Ptr,unsigned int __formal)Line 182 + 0x9 bytes C++ ShitLEncoder.exe!std :: basic_string,std :: allocator> :: _ Tidy(bool _Built, unsigned int _Newsize)Line 1998 C++ ShitLEncoder.exe!std :: basic_string,std :: allocator> :: assign(std :: basic_string,std :: allocator> & & _Right)Line 722 C++ ShitLEncoder.exe!std :: basic_string,std :: allocator> :: operator =(std :: basic_string,std :: allocator> & & _Right)Line 710 C++ ShitLEncoder.exe!FileOperations :: SetInputFile(QString x) Line 8 + 0x26 bytes C++ ShitLEncoder.exe!MainWindow :: on_OpenButton_clicked()Line 20 C++ ShitLEncoder.exe!MainWindow :: qt_static_metacall(QObject * _o,QMetaObject :: Call _c,int _id,void * * _a)第72行+ 0x8 bytes C++ Qt5Cored.dll!615820e0()
[下面的幀可能是不正確的和/或丟失,沒有爲Qt5Cored.dll加載的符號]
Qt5Cored.dll!615c6 13F()
Qt5Cored.dll!615c5ac1()
Qt5Widgetsd.dll!66a7118b()
Qt5Widgetsd.dll!66727087()
Qt5Widgetsd.dll!6672703b()
Qt5Widgetsd.dll!66728092()
Qt5Widgetsd.dll!66629ef5()
Qt5Widgetsd.dll!66624c40()
Qt5Widgetsd.dll!665e0887()
Qt5Widgetsd.dll!66625405()
Qt5Widgetsd.dll!6665de30()
Qt5Widgetsd.dll!665f15a0 ()! Qt5Widgetsd.dll 665e0253()
msvcr100d.dll _free_dbg(void *的pUserData,詮釋nBlockUse)線1267個+位於0xC字節C++ 0246b188()

它顯示了在代碼的第一件事是:

_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)); 

我在QT Creator中使用QT 5。

[編輯] 這裏是QT的主窗口類使用調用這些函數的代碼:

void MainWindow::on_OpenButton_clicked() 
{ 
    ui->OpenText->setText(QFileDialog::getOpenFileName(this, tr("Open File"),"",tr("Any        file"))); 
    FileController->SetInputFile(ui->OpenText->text()); 
} 

void MainWindow::on_SaveButton_clicked() 
{ 
    ui->SaveText->setText(QFileDialog::getSaveFileName(this, tr("Save File"),"",tr("Any  file"))); 
    FileController->SetOutputFile(ui->SaveText->text()); 
} 
+0

FileOperations是否在通過INCLUDEPATH找到的mainwindow之外的另一個文件夾中? –

+0

FileOperations是一個單獨的類,但它不在單獨的文件夾中。 – killerloader

回答

0

好吧,我固定它,我不能確定這是如何工作的,我改變了這一點:

class FileOperations 
{ 
public: 
    void SetInputFile(QString x); 
    void SetOutputFile(QString x); 
private: 
    string InputFilename; 
    string OutputFilename; 
}; 

要這樣:

class FileOperations 
{ 
public: 
    void SetInputFile(QString x); 
    void SetOutputFile(QString x); 
private: 
    string UnusedVariable; 
    string InputFilename; 
    string OutputFilename; 
}; 

我添加一個額外的未使用的變量,它停止崩潰:d

+0

所以你仍然有這個問題。你提供的不是解決方案。 –

+0

如果這「固定」它,你可能只需要一個完整的清潔和構建。 – cmannett85

+0

乾淨和構建,像重建?好吧,如果這就是你的意思,我嘗試了很多次o.o 我修改了其他東西以使其起作用,這並沒有幫助。 @Kamil Klimek 那麼提供固定的我的問題,sorta使它成爲一個解決方案..我猜:S – killerloader