Реализация стека C (домашнее задание)

#c #data-structures #stack

#c #структуры данных #стек

Вопрос:

РЕШАЕМАЯ: Я не могу понять, почему я получаю ошибку при попытке инициализировать стек здесь:

 #include "stack.h"
#include "linkList.h"


Stack::Stack() : m_top(0), m_size(0)
{
    m_stack = new List(); // cannot assign m_stack this way. How do i initialize here?
}
  

Синтаксическая ошибка в соответствии с Intellisense заключается в следующем:

 Error: a value of type List* cannot be assigned to an entity of type List*
  

Класс stack находится здесь:

 #ifndef stack_H
#define stack_H

#include "linkList.h"


class Stack
{
public:

    //
    // Constructor to initialize stack data
    //
    Stack();

    //
    // functionality to determine if stack is empty
    //
    bool isEmpty();

    //
    // methods for pushing data on to stack and for
    // popping data from the stack
    //
    void push(Node* current, int newValue);
    void pop();

private:

    //
    // member data which represent the stack, the top
    // of the stack and the size of the stack
    //
    Node* m_top;
    List* m_stack;
    unsigned m_size;
};

#endif
  

Я знаю, что класс linkList работает, потому что я тестировал его раньше. Если бы я хотел создать новый список, все, что мне нужно сделать, это:

 List* myList = new List();
  

РЕШАЕМАЯ: теперь я получаю некоторые приводящие в бешенство ошибки компоновщика, и я не могу понять, почему:

 1>------ Build started: Project: Stack, Configuration: Debug Win32 ------
1>Build started 10/10/2011 4:50:24 PM.
1>InitializeBuildStatus:
1>  Touching "DebugStack.unsuccessfulbuild".
1>ClCompile:
1>  myStack.cpp
1>  linkList.cpp
1>  Generating Code...
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:UsersDylandocumentsvisual studio 2010ProjectsStackDebugStack.exe : fatal error        LNK1120: 1 unresolved externals
1>
1>Build FAILED.
  

Чтобы убедиться, что мой файл заголовка стека не конфликтует с STL или чем-то еще, я переименовал его в MyStack.h (да, начинайте смеяться):

 #ifndef myStack_H
#define myStack_H
  

Комментарии:

1. Я не вижу ничего принципиально неправильного. Добавьте фактическое сообщение об ошибке, которое вы получаете.

2. Что делать m_stack = new List; ?

3. Как насчет того, чтобы просто List m_stack; вместо того, чтобы динамически выделять объект списка вообще?

4. Не обращайте внимания на то, что говорит Intellisense, сообщает ли компилятор об ошибке? Также он должен быть m_list(new List()) в списке инициализатора.

5. @Dylan: Вам не нужно динамическое выделение для самого списка.

Ответ №1:

Эта ошибка :

 1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
  

Обычно это происходит, когда ваш проект неправильно настроен. Я предполагаю, что вы пишете консольное приложение, но вы выбрали в качестве типа проекта что-то другое, чем консольное приложение.

Комментарии:

1. Или, более простой случай заключается в том, что ни main в одном из двух связанных файлов не определена точка входа. 🙂

2. @vhallac Ну, я надеюсь, что это не так 🙂

Ответ №2:

Эта ошибка компоновщика

 1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:UsersDylandocumentsvisual studio 2010ProjectsStackDebugStack.exe : fatal error        LNK1120: 1 unresolved externals
  

означает, что компоновщик не может найти функцию main() . Вы пытаетесь создать исполняемый файл, поэтому у вас должен быть main() .

Кроме того, похоже, что вы отредактировали свой первоначальный вопрос, чтобы теперь он был чем-то другим. Это очень запутанно, потому что вопрос и ответы / комментарии больше не совпадают. Начните новый вопрос, если вы столкнетесь с другой проблемой.