【问题标题】:Why aren't my functions running?为什么我的函数没有运行?
【发布时间】:2014-07-03 04:51:39
【问题描述】:

我是一个初学者,我正在尝试掌握这个 C++ 作业的窍门。我应该读取一个文件并将其放入向量中,对其进行排序,然后在 3 个单独的非成员函数中将其输出到一个新文件中,但由于某种原因它们不会运行。从来没有输出一个新文件,我什至把 done 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 中的引用问题

【问题讨论】:

  • 我记得,包含stdafx.h 应该是第一行代码。为什么你对这个小代码使用预编译的头文件让我感到困惑,但如果没有记忆,它就不在正确的地方。
  • 当您使用调试器单步执行语句时,您发现了什么信息?

标签: c++ function input vector output


【解决方案1】:

void readtoVector(vector&lt;string&gt; weblog) 中,您将向量的副本发送到函数中,而不是实际的,然后在函数中填充容器。因此,当函数调用返回时,向量会返回到堆中。

您应该像使用其他函数一样发送参考:

void readtoVector(vector<string>& weblog)

此外,您的代码没有编译。线

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

在函数void writeVector() 中请求了向量大小。您应该调用成员函数size() 而不是直接请求它。此外,您的情况不会评估为真。它应该是&lt;

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

解决这个问题,您的代码在我使用 Visual Studio 2013 的机器上运行良好。

【讨论】:

  • 我修复了它,但我仍然没有得到任何输出。
【解决方案2】:

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

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

我想你想要这个:

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

注意size()是成员函数,需要函数调用操作符,循环条件为less than

【讨论】:

  • 不幸的是,我认为应该编译。函数->函数指针->bool->int,可以比较。
  • @chris:我用 g++ 和 VS2013 进行了测试,并且都为此发出了错误。可能是连续转化次数过多。
  • 我认为标准转换没有限制。不过很有趣。我还指成员函数(指针),这可能就是它不起作用的原因。我也刚刚意识到你不能比较指针和整数。
  • @chris:我只是根据this information 猜测。我没有足够的语言律师来引用这个标准(我太懒了)。
【解决方案3】:

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

【讨论】:

  • 我修复了它,但我仍然没有得到任何输出。