函数未在此范围内声明。我错过了什么?

时间:2014-12-02 18:44:13

标签: c++

我的函数output_all,add_item和remove_item都是从main.cc文件中获取此错误的。我错过了什么?我认为这很简单,但显然我搞砸了。我将在下面包含我的文件。提前感谢您的帮助!

main.cc

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


int main(){


int choice;
string item;

cout << "Would you like to: \n\n 1.See List \n 2.Add an Item \n 3.Remove an item \n 4.Exit \n\n Please Enter a number: ";
cin >> choice;

if (choice == 1){

output_all(cout);

}

else if (choice == 2){

cout << "Please enter the item you would like to add to the list: ";
cin >> item;
add_item(item);

}

else if (choice == 3){

cout << "Please enter the name of the item you would like to remove: ";
cin >> item;
remove_item(item);
}

else if (choice == 4){

exit(1);

}


else {

main();

}



return (0);

}

basket.h

#include <iostream>
#include <string>
using namespace std;


class basket{

public:
    //function will output all of the items currently in the list
    void output_all(ostream& fout);

    //Function will allow user to add item to list
    void add_item(const string& item);

    //function will remove item from list after checking that item exists in the list
    void remove_item(const string& item);

    // accessor  method to access the string name
    string get_name();


private:

//string variable used for storing thr list
string name;

};

basket.cc

#include <iostream>
#include <string>
#include "basket.h"
using namespace std;



void basket::output_all(ostream& fout){

fout << name;



}


void basket::add_item(const string& item){

name = name + " " + item;


}


void basket::remove_item(const string& item){

int num = name.find(item);

name.erase(num, item.length());
}


string basket::get_name(){

return (name);


}

2 个答案:

答案 0 :(得分:0)

嗯,您在output_all中调用add_itemremove_itemmain等函数。你的程序中没有这样的功能。因此[明显]错误。

如果您尝试调用类basket的成员函数,那么您应该声明类型为basket的对象并使用完全不同的语法(成员访问语法)。你最喜欢的C ++书籍会有很多解释和例子。

BTW,在C ++中手动调用main函数是违法的。你必须学会​​使用周期来实现你对main的递归调用所要做的事情。

答案 1 :(得分:0)

我可以看到output_all()add_item()remove_item()basket类的非静态成员。因此,应从output_all(cout)

等对象调用basketObj.output_all(cout);