我是C ++的新手,我不明白是什么原因引起了我的问题以及如何解决它。基本上,我正在尝试创建一个包含对象的结构堆栈,但程序一直给我提出我不理解但无法解决的问题。任何暗示我应该做什么将非常感激。我当前的错误是:error: cannot convert ‘Telefon’ to ‘Telefon*’ in assignment
class Telefon {
public:
Telefon() : cena(0.0), model(NULL), producent(NULL) {}
double cena;
string model;
string producent;
Telefon(double a, string b, string c) {
cena=a;
model=b;
producent = c;
}
};
Telefon* buildTelefon() {
double cena;
string model, producent;
std::cout<< "podaj cene telefonu: " << std::endl;
std::cin >> cena;
std::cout<< "podaj model telefonu: " << std::endl;
std::cin >> model;
std::cout<< "podaj producenta telefonu: " << std::endl;
std::cin >> producent;
Telefon *tel = new Telefon();
tel = Telefon(cena, model, producent);
return tel;
}
class StackLinkedList
{
private:
struct Node
{
Telefon telefon;
struct Node *ptrToNext;
};
public:
struct Node *first;
StackLinkedList(){first = NULL;}
void push(Telefon&);
};
void StackLinkedList::push(Telefon& telefon_)
{
Node *oldfirst = first;
Node *temp = new Node();
temp->telefon = telefon_;
temp->ptrToNext = oldfirst;
first = temp;
}
int main () {
int n;
std::cout << "stacks length: "<< endl;
cin >> n;
StackLinkedList myStack = StackLinkedList();
for (int i = 0; i < n; i++){
Telefon *telefon = buildTelefon();
myStack.push(*telefon);
}
}
答案 0 :(得分:1)
我怀疑你应该替换
Telefon *tel = new Telefon();
tel = Telefon(cena, model, producent);
与
Telefon *tel = new Telefon(cena, model, producent);
甚至更好(在更多genuine C ++ 11中)。
auto tel = new Telefon(cena, model, producent);
但你应该花几天的时间在Programming - Principles and practice using C++上阅读一本好书并查看C++ reference你不理解的任何内容。
你的代码看起来很麻烦,闻起来很糟糕。详细了解标准containers和smart pointers。请务必至少为C ++ 11编写代码(因此NULL
错误,或至少非常糟糕;请使用nullptr
)。
不要忘记编译所有警告&amp;调试信息(例如,如果使用最近的 GCC编译器,则为g++ -Wall -Wextra -g
)。改进您的代码,直到您没有警告。然后使用调试器(gdb
),特别是逐步运行程序(并查询程序状态)。
PS。如果您的编译器不支持C ++ 11,则应升级或更改编译器。 C ++ 11标准对w.r.t有很多改进。像C ++ 03这样的旧标准,你不应该浪费时间学习比C ++更老的东西。