Форум программистов, компьютерный форум CyberForum.ru

Ошибка С2079 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Пароль http://www.cyberforum.ru/cpp-beginners/thread376719.html
Всем доброго времени суток! У меня появилась такая проблема с организованием пароля:). Есть гланая форма, на которой расположен компонент MainMenu. При нажатии кнопки мыши на один из подразделов, необходимо организовать пароль. Для этого я вставила в проект новую форму, НО! Появление формы для ввода пароля должно выводиться до тех пор пока пользователь первый раз не наберет его правильно, а...
C++ Очередь из разнитипных элементов Помогите пожалуйста, задаче не хочет выводить метод speek(). Ошибка у меня в int main()после того как я объявила указатель на очередь /* Создать очередь из разнотипных элементов-животных, образованных от одного базового класса Animal. Испольpовать замещение метода Speek() в каждом подклассе. Продемонстрировать работу очереди в main. */ #include<iostream> #include<math.h> using... http://www.cyberforum.ru/cpp-beginners/thread376714.html
C++ хочу написать прогу не знаю как
Хочу написать программу которая При изменении цвета(например серого на желтый) на определенном пикселе или Группе пикселей(участке монитора), например загорания некой лампочки, нажимала определенную клавишу(например "4"). желательно чтоб координаты участка(пикселя) я мог задавать в ручную и клавишу тоже. подскажите как реализовать. Меня в основном интересует то как считывать информацию с экрана,...
Задание(( даже незнаю с чего начать... C++
Программы реализуются как ассемблерные вставки в языке высшего уровня (Паскаль, С++ и т.д.). Заданы два числа <16. Найти их произведение и с помощью битовых операций записать оба множителя и их произведение одно за другим в ячейку памяти размером в два байта без пропуска битов. Две свои программы написал на C++ Builder 6 summa(Aij * X) + summa(Bi * Y) и (A * X + B) div (C * X2 + D * X +...
C++ Анимация в С++ http://www.cyberforum.ru/cpp-beginners/thread376684.html
Уважаемые, программисты! кто может сделать анимацию в программе С++, рисунок можно самый простой лижбо он был в движение. Зарание огромное спасибо! Добавлено через 34 минуты Помогите пожалуйстааааааааааааааааааа
C++ По количеству делителей числа определить само число Название темы говорит само за себя, а теперь подробнее: По заданному количеству делителей числа требуется найти само это число. Входные данные Во входном файле INPUT.TXT записано количество делителей D некоторого натурального числа N (1 <= D <= 5000). Выходные данные В выходной файл OUTPUT.TXT запишите число N. Если решений несколько, выведите наименьшее из них. Если решения нет,... подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
02.11.2011, 19:36     Ошибка С2079
Цитата Сообщение от kuroiryuu Посмотреть сообщение
имеется описание классов в h-файле
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <map>
#include <set>
 
class Node;
class EdgeToNode;
class AdjacencyList;
 
typedef std::set<EdgeToNode> EdgesList;
typedef std::map<size_t, Node> NodesList;
 
class Node
{
public:
    Node(Node & node);
    Node(size_t key, std::wstring name) : key_(key), name_(name) {}
    ~Node();
    void AddDirected(Node node);
    void AddDirected(Node node, double cost);
    void AddDirected(EdgeToNode* edge);
    bool HasNeighbor(size_t key);
 
    inline size_t GetKey() const { return key_; }
    inline std::wstring GetName() const { return name_; }
private:
    size_t key_;
    std::wstring name_;
    AdjacencyList neighbors_; //ОШИБКА C2079!!!
};
 
class EdgeToNode
{
public:
    EdgeToNode(Node neighbor) : neighbor_(neighbor), cost_(1.0) {}
    EdgeToNode(Node neighbor, double cost) : neighbor_(neighbor), cost_(cost) {}
 
    inline double Cost() {return cost_;}
    inline Node Neighbor() const {return neighbor_;} //ОШИБКА C2558!!!
private:
    double cost_;
    Node neighbor_;
};
 
class AdjacencyList
{
public:
    virtual void Add(EdgeToNode e);
    virtual bool Contains(Node node);
    virtual bool Contains(EdgeToNode edge);
    inline EdgesList::iterator GetBeginEdge() {return list_.begin();}
    inline EdgesList::iterator GetEndEdge() {return list_.end();}
private:
    EdgesList list_;
};
при компиляции вылазит две ошибки
error C2558: class 'Node' : no copy constructor available or copy constructor is declared 'explicit'
error C2079: 'Node::neighbors_' uses undefined class 'AdjacencyList'

подскажите как бороться с этими ошибками?

по C2079 пробовал описать переменную Node::neighbors_ как
C++
1
AdjacencyList* neighbors_;
ошибка исчезла, но такое использование указателя не самый лучший способ, хотелось бы узнать как правильно в данной ситуации применить std::auto_prt<AdjacencyList>
У вас возникает ошибка потому, что в классе Node, когда вы определяете член класса AdjacencyList neighbors_;, компилятору не известно определение этого типа, то есть AdjacencyList Вы лишь предварительно объявили этот класс, но не определили, а компилятору, чтобы правильно определить класс Node, нужно знать размер класса AdjacencyList . То есть в этом месте тип AdjacencyList является неполным типом: компилятор не имеет информации о его размере. Когда же вы это поле заменили указателем, то компилятору не нужно само строение класса AdjacencyList , так как размер указателя компилятору в любом случае известен.

Во-втором случае при объявлении функции

C++
1
inline Node Neighbor() const {return neighbor_;}
проблема заключается в том, что в классе Node вы объявили конструктор копирования следующим образом

C#
1
Node(Node & node);
то есть вы передаете не константную ссылку в качестве аргумента. А на временные объекты можно ссылаться только по константной ссылке. То есть компилятор не нашел подходящего конструктора копирования и выдал сообщение об ошибке.

То есть чтобы было понятно, ваша функция

C++
1
inline Node Neighbor() const {return neighbor_;}
в качестве возвращаемого значения создает временный объект Node, а соответствующий конструктор копирования вида

C#
1
Node(const Node & node);
отсутствует!
 
Текущее время: 18:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru