将char指针作为模板参数传递给标题

时间:2017-03-28 18:02:23

标签: c++

我正在尝试模拟添加/删除课程,但我收到分段错误。 (将课程添加到链表),我也尝试使用char数组,但问题仍然存在。我不擅长c ++,我搜索模板的使用情况,每个例子都像地雷,但我的工作不起作用......

标题文件:

template<class T>
class LL
{
protected:
    node<T> *head, *last;
    int count;
public:
    LL();
    ~LL();
    bool emptyList();
    int length(){return count;};
    T back();
    T front();
    void destroyList();
    node<T> *search(T&);
    void insertFirst(T&);
    void insertLast(T&);
    void deleteNode(T&);
    void printList();
        template<class T>
        void LL<T>::insertLast(T& item)
        {
            node<T> *p = new node<T>;
            p->info = item;
            p->link = NULL;
            if(head != NULL)
            {
                last->link = p;
                last = p;
            }else head = last = p;
            count++;
        }
    template<class T>
    node<T> *LL<T>::search(T& item)
    {
        bool found = false;
        node<T> *p = head;
        while((p != NULL) &&  found)
        {
            if(p->info == item)
                found = true;
            else p = p->link;
        }
        return p;
    }

主要课程

 LL<char*> ll;
    while(true)
    {
        char command[256];
        cout << "Enter Add | Drop | Change | List | Quit:";
        cin>>command;
        cout<<endl;

        if(strcmp(command,"Add")==0)
        {
            char* course;
            char* credit;
            char* section;

            cout<<"Enter CourseCode, Credit and Section to be added:"<<endl;
            cin>>course>>credit>>section;
            cout<<course<<" "<<credit<<" "<<section<<endl;

            if(ll.search(course) == NULL)
            {
                ll.insertLast(course);
            }
        }
}`

2 个答案:

答案 0 :(得分:0)

这不起作用

strcmp(command,"Add")==0

因为int strcmp ( const char * str1, const char * str2 );"Add"是一个字符串。你最好像写

一样写smth
std::string str("Add");
char* chr = (char*)str.c_str();
strcmp(command, chr)==0

答案 1 :(得分:0)

您的代码存在多个问题。最基本的一点是,您没有为通过char *写入的std::cin指针分配内存。如果通过

分配内存
char* course = new char[256];

段错误是固定的。然后,LL<char*>可以用作链接列表类型 - 尽管使用std::string仍然会更好。

此外,您的LL::search方法已损坏,您需要重新考虑其逻辑。除此之外,您还可以通过将代码复制粘贴到问题框中来解决一些更微不足道的问题。