Неожиданный #ifndef, нет вызова соответствующей функции (связанный список C ++)

Привет, я в настоящее время работаю над проектом со связанным списком, но при этом получаю несколько ошибок, которые я не могу решить. Первая ошибка, которую я получаю, это неопределенный #ifndef. Что меня смущает, так это то, что я не #include исходный файл в заголовке.

Моя вторая ошибка, которую я получаю, находится в моем main.cpp, где я получаю сообщение об ошибке » нет вызова соответствующей функции для List :: AddNode (double, double, double и т. д.)».

Я разместил все три своих файла в надежде, что кто-нибудь поможет мне разобраться в этих ошибках, спасибо.

РЕДАКТИРОВАТЬ: Спасибо за тех, кто помог мне, что решил мою проблему, но теперь я получаю новые ошибки, говоря
«неопределенная ссылка на List :: List () ‘,

неопределенная ссылка на List :: AddNode (double, double, double, double, double, double, double, double) ‘,

неопределенная ссылка на `List :: PrintList () ‘».

Главный

#include <iostream>
#include <cstdlib>
#include "List.h"
using namespace std;

int main()
{
List Moe;

Moe.AddNode(23.00, 7.00, 12.75, 7.65, 1.00,45.00, 0.18, 50.00);
Moe.PrintList();
}

Заголовочный файл

#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#endif LIST_H_INCLUDED

using namespace std;
class List
{
private:

struct node{
double adults, children,costA,costC,dessert,room,tt,deposit;
node* next, *link;

};
typedef struct node* nodePtr;

nodePtr head;
nodePtr curr;
nodePtr temp;

public:
List();
void AddNode(double addAdults,double addChildren, double addCostA, double addCostC,double addDessert, double addRoom, double addTT, double addDeposit);
void PrintList();
};

Файл CPP

#include <cstdlib>
#include <iostream>
#include "List.h"
using namespace std;

List::List()
{
head = NULL;
curr = NULL;
temp = NULL;
}
void List::AddNode(double addAdults,double addChildren, double addCostA, double addCostC,double addDessert, double addRoom, double addTT, double addDeposit)
{
nodePtr n = new node;
n->next = NULL;

n->adults = addAdults;
//cout >> "Number of Adults: " >> addAdults;
n->children = addChildren;
n->costA = addCostA;
n->costC = addCostC;
n->dessert = addDessert;
n->room = addRoom;
n->tt = addTT;
n->deposit = addDeposit;

if(head != NULL)
{
curr = head;
while(curr -> next != NULL)
{
curr = curr->next;
}
curr->next = n;
}
else
{
head = n;
}
}
void List::PrintList()
{
curr = head;
while(curr != NULL)
{
cout << "Total cost for adult meals:        $" << (curr -> adults) * (curr -> costA) << endl;
cout << "Total cost for child meals:        $" << ((curr -> children) *(curr -> costA)) * 0.60 << endl;
cout << "Total cost for dessert:            $" << ((curr -> adults) + (curr -> children)) * (curr -> dessert) << endl;
cout << "Total food cost:                   $" <<(curr -> adults) * (curr -> costA) +
(curr -> children) *(curr -> costA) * 0.60 +
((curr -> adults) + (curr -> children)) * (curr -> dessert)<< endl;
cout << "Plus tips and tax:                 $" <<curr -> tt * ((curr -> adults) * (curr -> costA) +
(curr -> children) *(curr -> costA) * 0.60 +
((curr -> adults) + (curr -> children)) * (curr -> dessert)) <<
" (Does NOT Include Room Fee)" << endl;
cout << "Plus room fee:                     $" << (curr -> room) << endl;
cout << "Less Deposit:                      $";
cin >>curr -> deposit;
cout << "" << endl;
cout << "Balance Due:                      $" << /*FOOD COST*/((curr -> adults) * (curr -> costA) +
(curr -> children) *(curr -> costA) * 0.60 +
((curr -> adults) + (curr -> children)) * (curr -> dessert)) +
/*TIPS & TAX*/ (curr -> tt * ((curr -> adults) * (curr -> costA) +
(curr -> children) *(curr -> costA) * 0.60 +
((curr -> adults) + (curr -> children)) * (curr -> dessert))) +
/*ROOM FEE */ ((curr -> room)) - /*DEPOSIT*/ (curr -> deposit) << endl;
cout << "" << endl;

curr = curr->next;

}
}

1

Решение

Вы неправильно поняли путь охранники используются: вам нужен оператор условной компиляции для защиты всего содержимого заголовка, а не только #define, Переехать #endif в конец файла и удалите или закомментируйте LIST_H_INCLUDED в конце:

#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED

using namespace std;
class List
{
private:

struct node{
double adults, children,costA,costC,dessert,room,tt,deposit;
node* next, *link;

};
typedef struct node* nodePtr;

nodePtr head;
nodePtr curr;
nodePtr temp;

public:
List();
void AddNode(double addAdults,double addChildren, double addCostA, double addCostC,double addDessert, double addRoom, double addTT, double addDeposit);
void PrintList();
};

#endif /* LIST_H_INCLUDED */
2

Другие решения

главный ошибка у вас есть с вашими охранниками заголовка. В настоящее время вы делаете это:

#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#endif LIST_H_INCLUDED

до вы начинаете свой код, который на самом деле не имеет никакого эффекта, так как охранники заголовка на самом деле не охрана что-нибудь. Таким образом, когда вы включаете «List.h» дважды, компилятор жалуется. Правильный способ сделать это будет

#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED

//... List code ...

#endif //Endif goes at the end of file

Таким образом, если файл «List.h» уже включен, вы случайно не включите его снова. Кроме того, если вы хотите сделать это проще для себя и компилируете на компиляторе, который поддерживает операцию, вы можете использовать следующее:

#pragma once

//... List code ...

#pragma once делает то же самое, что и include guard, хотя он нестандартный, но в основном поддерживается большинством, если не всеми новыми компиляторами.

0

По вопросам рекламы [email protected]