Nicholas
Nicholas

Reputation: 29

redefinition , different basic types for string

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

}

anyone knows why am i getting a "path" redefinition ; different basic types for the string path, however when i pass the string directly instead of using the variable path it works.

Upvotes: 1

Views: 1025

Answers (1)

Mike Seymour
Mike Seymour

Reputation: 254471

loadFromTextFile(path); is equivalent to loadFromTextFile path;, a declaration.

loadFromTextFile("E:\\10x10.txt"); can't be interpreted as a declaration, so instead it's treated as a conversion expression, creating and destroying a temporary object. It compiles, but probably isn't what you want either.

You probably want to declare a named variable, so the data it loads is still available afterwards:

loadFromTextFile loaded(path);

Upvotes: 4

Related Questions