【问题标题】:redefinition , different basic types for string重新定义,字符串的不同基本类型
【发布时间】:2015-03-03 14:30:03
【问题描述】:

loadFromTextFile.h

#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <cstdlib>

class loadFromTextFile{
private:
    int rows = 0;
    int columns = 0;
    std::string file_path;
    std::vector<std::vector<std::string> > nodeGrid;
    void process(std::string);
public:
    loadFromTextFile(std::string);
    loadFromTextFile();

};

loadFromTextFile.cpp

#include "loadFromTextFile.h"

using namespace std;

//implementions
loadFromTextFile::loadFromTextFile(string filePath){
    file_path = filePath;
    string line;
    ifstream f(file_path);

    if (!f.is_open())
        perror("error while opening file");
    while (getline(f, line)) {
        process(line);
    }
    if (f.bad())
        perror("error while reading file");

    cout << "total rows" << rows;
}
void loadFromTextFile::process(string s){
    rows++;
    cout << s<<endl;

}

main.cpp

#include "loadFromTextFile.h"

int main(){

    std::string path = "E:\\10x10.txt"; 
    loadFromTextFile(path);
    //loadFromTextFile("E:\\10x10.txt");//works

}

任何人都知道我为什么要重新定义“路径”;字符串路径的不同基本类型,但是当我直接传递字符串而不是使用变量路径时,它可以工作。

【问题讨论】:

  • 当您将path 重命名为test_path_h 之类的名称时是否会出错?
  • 是的,但是如果我这样输入路径: loadFromTextFile("E:\\10x10.txt");它工作正常

标签: c++


【解决方案1】:

loadFromTextFile(path); 等价于 loadFromTextFile path;,一个声明。

loadFromTextFile("E:\\10x10.txt"); 不能被解释为声明,因此它被视为转换表达式,创建和销毁临时对象。它可以编译,但可能也不是您想要的。

您可能想要声明一个命名变量,因此它加载的数据在之后仍然可用:

loadFromTextFile loaded(path);

【讨论】:

  • 如果他真的不想要一个命名变量,只是想使用构造函数和析构函数来实现它们的副作用,他可以这样做(void)loadFromTextFile(path);
猜你喜欢
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多