Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Пацанчик
7 / 7 / 3
Регистрация: 18.05.2010
Сообщений: 26
#1

Самописный класс (.cpp +.h) ошибка ambiguity between... - C++

18.05.2010, 13:52. Просмотров 1036. Ответов 7
Метки нет (Все метки)

Я вобще почти ничего не знаю в c++, самый что нинаесть новичок, пытаюсь разобраться с классически принятой(сообществом) структурой проектов, как где что объявлять лучше, в каких файлах и т.д. Вобщем подучите, где накосячил:
файл stack.h
Код
struct point
{
  int x;
  int y;
};
class TStack
{
  public:
    point tochka;
    void push(int x, int y);
    point pop(void);
    point index(int i);
    int length(void);

  private:
    point st[];
    int len;
    int count;
    TStack();
    ~TStack();
};
файл stack.cpp приведу частично, т.к. всё аналогично первой функции...
Код
#include "stack.h"
void TStack::push(int x, int y)
{
  if ((count+1)>=len)
  {
    len = len * 2;
    sizeof(st, len);
  }
  st[count].x = x;
  st[count].y = y;
  count++;
};
...
Среда - BCB 6.0, ошибки:
Код
ambiguity between 'TStack' and 'Contnrs::TStack';
вобщем-то еще в файле много функций и при подобном обращении к ним
Код
void TStack::push(int x, int y)
вылазит такая ошибка.
Научите как правильно и, если что-то делаю не совсем так, как "принято", то подскажите, может какие директивы забыл или еще что...
Да, и вот еще что - хочу потом подключить всё это дело в обычный проект с формой, как корректно это сделать, в unit1.h подключать stack.cpp или в unit1.cpp?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2010, 13:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Самописный класс (.cpp +.h) ошибка ambiguity between... (C++):

Библиотеки в CPP. Ошибка компиляции | CPP - C++
Доброго вечера! Появился один вопросик недавно. Начал юзать библиотеку <windows.h> для использования такой команды как "system" в коде....

шаблонный вложенный класс в .cpp - C++
Привет всем! есть шаблонный вложенный класс . template<typename FinalVertex> class BFSVisitor : boost::default_bfs_visitor { ...

Как вынести метод возвращающий шаблонный класс в из hpp в cpp? - C++
Есть код в заголовоном файле: template<class T,typename Ptr> class LINQ { private: Ptr begin; Ptr end; std::vector<T*>...

Разделение проекта на файлы .cpp где полностью описывается один класс - C++
Всем привет! Бьюсь над задачей: есть несколько классов, куча объявленных констант через #define и отдельные функции. Захотел все это...

Что за ошибка: "E2015 Ambiguity between 'time' and 'std::time"? - C++
Коды ошибок: v8.cpp(132): E2015 Ambiguity between 'time' and 'std::time(long *)' v8.cpp(133): E2015 Ambiguity between 'time' and...

Что за ошибка: "E2015 Ambiguity between 'time' and 'std::time"? - C++
Коды ошибок: v8.cpp(132): E2015 Ambiguity between 'time' and 'std::time(long *)' v8.cpp(133): E2015 Ambiguity between 'time' and...

7
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,467
Записей в блоге: 1
18.05.2010, 13:58 #2
где то в библиотечных файлах уже есть определение TStack, назови свой класс по другому и будет счастье
1
Пацанчик
7 / 7 / 3
Регистрация: 18.05.2010
Сообщений: 26
18.05.2010, 14:23  [ТС] #3
Действительно, TMyStack везде прокатило, Спасибо! А я ломаю голову что не так - и так и эдак пробовать начал (думал в директивах дело, всякие #ifdef #endif и т.д. уже пытаюсь заюзать, но выходит лишь всё хуже... ). Всётки после дельфи непривычно - вроде всё похоже и в тоже время мелочей всяких полно (навроде того что тут нет типа point и приходится как структуру его вводить и т.д.). К проекту подключил mystack.cpp в unit1.h, вроде ошибок нет.
0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
18.05.2010, 14:57 #4
Цитата Сообщение от Пацанчик Посмотреть сообщение
думал в директивах дело, всякие #ifdef #endif и т.д. уже пытаюсь заюзать, но выходит лишь всё хуже...
Советую всё-таки "заюзать".
Цитата Сообщение от oxotnik Посмотреть сообщение
где то в библиотечных файлах уже есть определение TStack, назови свой класс по другому и будет счастье
А пространства имён для кого придумали?
0
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,467
Записей в блоге: 1
18.05.2010, 15:16 #5
Цитата Сообщение от rangerx Посмотреть сообщение
А пространства имён для кого придумали?
Я сначала тоже про них хотел написать, но подумал, что слишком сложно будет объяснить (много писать придется), а с переименованием объекта все траблы решаются быстрей.
0
Пацанчик
7 / 7 / 3
Регистрация: 18.05.2010
Сообщений: 26
18.05.2010, 23:01  [ТС] #6
Наступил еще на 1 грабли Хотел создать экземпляр класса майстек и потом присвоить ему новый экземпляр тогоже класса, от функции, которая собс-но его возвращает. По незнанию что-то не так делаю...
Код
[Linker Error] Unresolved external 'TfrmMain::mkCirclePie(int)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\Erunda\MAIN.OBJ
Вижу где ошибка, но как исправить совсем запутался.
Объявление функции mkCirclePie:
Код
TMyStack* mkCirclePie(int r);
Функция mkCirclePie:
Код
TMyStack* mkCirclePie(int r)
{
  TMyStack *MyStack;
  ...
  return MyStack;
}
Событие pbOutMouseDown
Код
void __fastcall TfrmMain::pbOutMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  ...
  TMyStack *st;
  ...
  st = mkCirclePie(x);
  ...
  st = mkCirclePie(y);
  ...
}
0
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,467
Записей в блоге: 1
18.05.2010, 23:50 #7
тело функции не там прописал, или не везде заголовок подключил с описанием... линкер нашел определение ф-ции а реализацию ее найти не может
1
Пацанчик
7 / 7 / 3
Регистрация: 18.05.2010
Сообщений: 26
19.05.2010, 00:52  [ТС] #8
ааа... точно, в реализации забыл TfrmMain:: добавить, вот он и не видал тело. А я грешил на указатель (ибо вечно его коряво использую когда надо). Спасибо
0
19.05.2010, 00:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2010, 00:52
Привет! Вот еще темы с ответами:

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp - C++
С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp

А_Ламот demo3_6.cpp где ошибка? - C++
Ктото уже точно это проходил, помогите разобратся, пожалуйста? часть кода из "demo3_6.cpp" sprintf(buffer,"WM_PAINT called %d times. ...

Непонятная ошибка компилятора Dev-Cpp - C++
#include <cstdlib> #include <iostream> using namespace std; void s(int a) { cout<<a<<endl; } class matrix ...

Ошибка при использовании подключённых .h и .cpp компонентов - C++
Доброго времени суток. Некоторое время назад начал изучать C++ по 5-му изданию книги Дейтелов. Всё спокойно получалось, пока не дошёл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.