我对C++很陌生。我需要制作一个小的应用程序,该应用程序读取txt文件的内容,然后在控制台中显示该内容。我有三个点构成一个三角形,稍后我将对其进行绘制。我想在一个名为read2dFile的函数中执行所有此操作,因此我的main实际上是空的(该函数的调用除外)。当我在另一个项目的main中尝试此代码时,一切工作正常。似乎我的函数未正确声明。这是我的代码:

**Test.cpp** (FOR THE MAIN)

// Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "read2dFile.h"

int main()
{
    read2dFile();
    return 0;
}

read2dfile.h (用于函数头)
#ifndef READ2DFILE_H_
#define READ2DFILE_H_

#include <iostream>
#include <iomanip>
#include <array>
#include <fstream>
#include <sstream>
#include <string>
#include <stdio.h>

using namespace std;

void read2dFile();

#endif

read2dFile.cpp (用于功能代码)
#include "read2dFile.h"

int row = 0;
int col = 0;

void read2dFile() {

    string line;
    int x;
    int array[100][100] = { { 0 } };
    string filename;

    ifstream fileIN;

    // Intro
    cout
        << "This program reads the number of rows and columns in your data
    file."
        << endl;
    cout << "It inputs the data file into an array as well." << endl;
    cout << "\nPlease enter the data file below and press enter." << endl;
    cin >> filename;

    fileIN.open(filename);

    // Error check
    if (fileIN.fail()) {
        cerr << "* File you are trying to access cannot be found or opened *";
        exit(1);
    }

    // Reading the data file
    cout << "\n" << endl;
    while (fileIN.good()) {
        while (getline(fileIN, line)) {
            istringstream stream(line);
            col = 0;
            while (stream >> x) {
                array[row][col] = x;
                col++;
            }
            row++;
        }
    }

    // Display the data
    cout << "# of rows ---> " << row << endl;
    cout << "# of columns ---> " << col << endl;
    cout << " " << endl;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            cout << left << setw(6) << array[i][j] << " ";
        }
        cout << endl;
    }

}

最佳答案

我有一些建议(您的代码对我来说很好编译)。

  • 并非特定于您的问题,但您应该了解classobject oriented programming,以简化C++的生活。
  • 这些是read2dFile()函数所需的唯一包含文件。将它们放入read2dFile.cpp!原因是因为除非绝对必要,否则不要将 header 包含在其他 header 中。

  • 这些指令将位于 read2dFile.cpp 的顶部
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <string>
    #include <sstream>
    
  • using namespace std;打开闸门,并可能导致 namespace 冲突。尝试避免这样做。如果您仍然坚持要这样做,请在.cpp源文件中(而不是在.h头文件中)进行。相反,您可以声明使用标准 namespace 的特定部分(仅您需要的部分)。

  • 这些using指令可以代替using namespace std;,然后再次将它们放入 read2dFile.cpp 源文件中。
    using std::string;
    using std::ifstream;
    using std::cout;
    using std::endl;
    using std::cin;
    using std::cerr;
    using std::istringstream;
    using std::left;
    using std::setw;
    
  • 您的 read2dFile.h 现在已简化为仅函数声明。

  • 该文件现在看起来像这样。
    #ifndef READ2DFILE_H_
    #define READ2DFILE_H_
    
    void read2dFile();
    
    #endif
    

    您的main()可以保持原样,如果仍然无法使用,请尝试从 Test.cpp 源文件中删除预编译的头指令#include "stdafx.h"。这里不需要它,有时在某些情况下会导致编译器错误。

    关于c++ - 如何在C++中正确使用没有输入参数的void函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48455168/

    10-11 23:23