У меня есть структура вроде:
struct myNode{
Node node; // node object takes just name parameter I mean node(string name);
int value;
};
И в моей функции main() у меня есть указатель struct myNode, и я хочу сначала прочитать файл, чтобы получить имя объекта и значения узла (просто целое число), а затем создать соответствующую структуру myNode. Для этого я пишу
int main(){
struct myNode * myRoot;
ifstream myfile (fileName);
string line;
getline(myfile,line);
int value=getValue(line);
myRoot= new myNode();
myRoot->value=value;
myRoot->node=node a(line);
return 0;
}
Тем не менее, я не уверен, это правильный способ или нет, есть ли кто-нибудь, кто мог бы мне помочь?
Среди многих смертоносных проблем в вашем коде, тот, который я вижу, должен быть для вас наиболее неприятным, - это тот, который на этой строке:
myRoot->node = node a(line);
node a(line)
является синтаксической ошибкой. Я полагаю, вы это понимали:
myRoot->node = node(line);
или, если Node
не имеет explicit
конструктора:
myRoot->node = line;
Другими опасными проблемами являются тот факт, что вы используете указатели, выделяя new
(оба из которых являются ненужными) и что вы выполняете извлечение в потоке файлов, не проверяя, работает ли он. Все это можно решить, выделив объекты в стеке и проверив, удалось ли выполнить вход:
int main()
{
myNode myRoot;
ifstream myfile(fileName);
string line;
if (getline(myfile, line))
{
int value = getValue(line);
myRoot.value = value;
myRoot.node = line;
}
}
Да, он может работать, кроме:
myRoot->node= node a(line)
может быть просто myRoot->node = Node(line)
или myRoot->node = line
если конструктор конструктора myRoot->node = line
может принимать линию как единственный параметр. Я полагаю, вы рассматриваете как временный экземпляр узла.myRoot->node
уже произошло, наличие такого конструктора не поможет. Это будет работать только в том случае, если есть оператор присваивания, принимающий string
или сам Node
является string
.
Node
? Покажите нам больше.node a(line);
очень подозрительно