2014-05-14 48 views
0

我是一名初學者,我試圖獲得這個C++任務的訣竅。我應該讀取一個文件並將其放入一個向量中,對其進行排序,然後在3個獨立的非成員函數中將其輸出到一個新文件中,但由於某些原因,它們將無法運行。從來沒有新的文件輸出,我甚至把完成的cout放在那裏,以測試函數是否在運行,但我每次都沒有得到任何東西。如果我能得到一些幫助,將不勝感激,謝謝!爲什麼我的功能沒有運行?

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <string> 
#include <algorithm> 
#include "stdafx.h" 


using namespace std; 

void readtoVector(vector<string>& weblog) 
{ 
    string line; 

    fstream myFile; 
    myFile.open("weblog.txt"); 
    if (myFile.fail()){ 
     cerr << "File not available" << endl; 
    } 
    if (myFile.is_open()){ 
     for (line; getline(myFile, line);){ 
      weblog.push_back(line); 
     } 
     myFile.close(); 
    } 

} 

void sortVector(vector<string>& weblog) 
{ 
    sort(weblog.begin(), weblog.end()); 

} 

void writeVector(const vector<string>& weblog) 
{ 
    ofstream myFile; 
    myFile.open("newWeblog.txt"); 
    for (int i = 0; i > weblog.size; ++i){ 
     myFile << weblog[i] << endl; 
    } 
    myFile.close(); 

    cout << "done"; 
} 

int main() 
{ 
    vector<string> weblog; 
    readtoVector(weblog); 
    sortVector(weblog); 
    writeVector(weblog); 
    system("pause"); 
    return 0; 

} 

編輯:在readtoVector

固定的基準問題
+0

我記得,包含'stdafx.h'應該是第一行代碼。爲什麼你爲這個小代碼使用預編譯頭文件讓我感到困惑,但是如果內存能夠運行,它並不在正確的位置。 – chris

+0

當您用調試器單步執行語句時,您發現了哪些信息? –

回答

5

你忘了使用的參數參考,readtoVector。該函數在矢量的本地副本上運行;原來仍然是空的。

+0

我修正了它,但我仍然沒有得到任何輸出。 – user3422956

2

void readtoVector(vector<string> weblog)中,您將向量的副本發送到函數而不是實際的函數,然後在函數中填充容器。因此,當函數調用返回時,向量將返回堆。

就像你與其他功能你應該送參考:

void readtoVector(vector<string>& weblog) 

除了你的代碼沒有編譯。該行

for (int i = 0; i > weblog.size; ++i){ 

在功能void writeVector()已請求載體大小。您應該調用成員函數size()而不是直接請求它。你的情況也不會評估爲真。應該是<

for (int i = 0; i < weblog.size(); ++i) 

修復這一點,你的代碼使用Visual Studio 2013年

+0

我修正了它,但我仍然沒有得到任何輸出。 – user3422956

+0

@ user3422956看我的編輯。 – Varaquilex

1

作品在我的機器上完全正常的writeVector()下面的行不應該編譯:

for (int i = 0; i > weblog.size; ++i){ 

我想你想這個代替:

for (int i = 0; i < weblog.size(); ++i){ 

請注意,size()是一個成員函數並且需要函數調用操作符,並且循環條件應該是less than

+0

不幸的是,我認爲應該編譯。函數 - >函數指針 - >'bool' - >'int',可以進行比較。 – chris

+0

@chris:我用g ++和VS2013進行了測試,都發出了錯誤。這可能是連續轉換次數過多。 – Blastfurnace

+0

我不認爲標準轉換有限制。有趣的,但。我也意味着成員函數(指針),這可能是爲什麼它不起作用。我也意識到你不允許比較指針和整數。 – chris