这是程序提示:
编写一个C ++程序来处理文件中的元素周期表信息。每个元素都有一个原子序数,一个名称,一个缩写和一个质量。您的程序必须包括:
这是我的periodic_table.cpp的内容:
#include <iostream>
#include <cstdlib>
#include "Element.h"
#include <string>
#include <iomanip>
using namespace std;
int main() {
int count = 0;
Element **pt = new Element *[count];
cout << setw(30) << left << " Periodic Table by K. Nguyen" << endl;
cout << endl;
cout << setw(30) << " Number of elements: " << endl;
cout << endl;
cout << setw(5) << " Name" << right << setw(20) << "Abr" << setw(5) << " ANo" << setw(8) << "Mass" << endl;
cout << setw(20) << left << " --------------------" << setw(4) << right << "---" << setw(5) << "----" << setw(8) << "-------" << endl;
read_table(&count, pt);
delete [] pt;
return 0;
}
这就是我拥有的read_table.cpp:
#include <fstream>
#include <iostream>
#include <string>
#include "Element.h"
using namespace std;
int read_table(int *count, Element **ppt){
struct Node {
Element *pElement;
Node *next;
};
int temp = 0;
int aNum;
string aBr;
double mass;
string name;
Node *n = nullptr;
Node *h = nullptr;
Node *t = nullptr;
ifstream infile;
infile.open("periodictable.dat");
while(infile >> aNum >> aBr >> mass >> name){
Element *e = new Element;
e->ANo = aNum;
e->Abr = aBr;
e->Mass = mass;
e->Name = name;
n = new Node;
n->pElement = e;
n->next = nullptr;
if(h == nullptr){
h = t = n;
}
else {
t->next = n;
t = n;
}
temp++;
}
infile.close();
int i = 0;
for(Node *x = h; x, i < temp; x = x->next, i++){
ppt[i] = x->pElement;
}
*count = temp;
return 0;
}
这就是我对Element.h的要求:
#ifndef ELEMENT_H
#define ELEMENT_H
using namespace std;
struct Element {
int ANo;
string Abr;
double Mass;
string Name;
};
int read_table(int *count, Element **ppt);
#endif
我认为问题在于read_table.cpp中的此for循环:
int i = 0;
for(Node *x = h; x, i < temp; x = x->next, i++){
ppt[i] = x->pElement;
}
而且我不确定我是否正确传递了指针数组(这在periodic_table.cpp中):
int count = 0;
Element **pt = new Element *[count];
....
read_table(&count, pt);
错误是: 在函数“ main”中:periodic_table.cpp:对“ read_table(int *,Element **)”的未定义引用
当我包含for循环时,我的程序无法运行;但是,如果没有它,它将运行良好,所以我认为我在这里做错了什么,但我不知道该怎么办。请帮忙。
答案 0 :(得分:0)
如果您使用的是Microsoft Visual Studio(我在C ++中使用最多的一种);继续解决方案资源管理器;复制read_table.cpp的路径;右键单击资源管理器中的“源文件”文件夹,添加现有项。然后将路径粘贴到它。单击确定,然后再次运行您的程序。它应该工作。