为什么我的功能没有运行?

时间:2014-05-14 22:44:49

标签: c++ function input vector output

我是初学者,我试图掌握这个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中的引用问题

3 个答案:

答案 0 :(得分:5)

您忘记使用readtoVector参数的参考。该函数在向量的本地副本上运行;原件仍然是空的。

答案 1 :(得分: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,您的代码在我的机器上完美运行。

答案 2 :(得分:1)

writeVector()中的以下行不应编译:

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

我想你想要这个:

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

注意size()是一个成员函数,需要函数调用运算符,循环条件应该是less than