我有一个作业,我正在尝试读取一个文件并计算它有多少行。我正在尝试使用类,但我不知道如何在类中声明一个字符串成员。这是代码:
#include<iostream>
#include<cmath>
#include<fstream>
#include<istream>
#include<string>
#include<iomanip>
using namespace std;
// Clase Nodo
class Nodo {
Nodo* next;
public:
Nodo() {};
string strLinea;
string strAux1; // = "//p.";
string strAux2; // = "//i.";
string strAux3; // = "//d.";
string strAux4; // = "//m.";
void SetVariables(string data)
{
strLinea = data;
}
//void SetData(float EPS, float DH)
void SetData(string S)
{
strLinea = S;
};
void SetNext(Nodo* aNext)
{
next = aNext;
};
String Data()
{
return(strLinea);
};
Nodo* Next()
{
return next;
};
};
class Lista {
Nodo *head;
public:
Lista() { head = NULL; };
void Print();
void Append(string strLinea);
void Delete(string strLinea);
};
void Lista::Print() {
// ... Apuntador temporal ...
Nodo *tmp = head;
// ... No hay Nodos ...
if ( tmp == NULL ) {
cout << "EMPTY" << endl;
return;
}
// ... Existe un Nodo in the Lista ...
if ( tmp->Next() == NULL ) {
cout << tmp->Data();
cout << " --> ";
cout << "NULL" << endl;
}
else {
// ... Recorre la lista y la imprime ...
do {
cout << tmp->Data();
cout << " --> ";
tmp = tmp->Next();
}
while ( tmp != NULL );
cout << "NULL" << endl;
}
}
void Lista::Append(string strLinea){
// ... Aquí crea a Nodo nuevo ...
Nodo* newNodo = new Nodo();
newNodo->SetData(strLinea);
newNodo->SetNext(NULL);
// ... Crea un apuntador temporal ...
Nodo *tmp = head;
if ( tmp != NULL ) {
// ... El Nodo está en la Lista ...
// ... Recorre la Lista ...
while ( tmp->Next() != NULL ) {
tmp = tmp->Next();
}
// ... El último Nodo de la lista ...
tmp->SetNext(newNodo);
}
else {
// ... Nuevo Nodo de la lista ...
head = newNodo;
}
}
void Lista::Delete(string strLinea){
// ... Crea un Nodo temporal ...
Nodo *tmp = head;
// ... No hay Nodos ...
if ( tmp == NULL )
return;
// ... Último Nodo de la Lista ...
if ( tmp->Next() == NULL ) {
delete tmp;
head = NULL;
}
else {
// ... Recorre los nodos ...
Nodo *prev;
do {
if(tmp->Data() == strLinea) break;
prev = tmp;
tmp = tmp->Next();
} while ( tmp != NULL );
// ... Ajusta los Nodos ...
prev->SetNext(tmp->Next());
// ... Borra el Nodo actual ...
delete tmp;
}
}
int main(int argc, char* argv[])
{
string L;
int intLineCounter = 0;
Lista lista;
ifstream infile;
infile.open(argv[1], ios::in);
if(argc != 2)
{
cout << "ERROR.\n";
return 1;
}
if(infile.fail())
{
cout << "ERROR\n";
return 1;
}
else
{
while(!infile.eof())
{
getline(infile,L);
intLineCounter++;
cout<< L + "\n";
lista.Append(L);
}
infile.close();
cout << "Total lines: " << intLineCounter << endl;
return 0;
}
}
问题出在声明String Data()中的类中。如何申报?怎么解决?有任何想法吗 ?有什么建议吗?
答案 0 :(得分:3)
String Data()
{
return(strLinea);
};
C ++区分大小写...... std::string
以小写s
开头。你已经在这个文件中的许多其他位置正确地声明了它,不知道为什么这个会让你失望。
此外,在函数定义之后不需要分号。
答案 1 :(得分:2)
应该是
string Data()
{
return(strLinea);
};
C ++是一种区分大小写的语言。