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

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

Войти
Регистрация
Восстановить пароль
 
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
#1

new не работает со структурой у которой перегружены скобки - C++

21.01.2013, 13:47. Просмотров 571. Ответов 10
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Coordinate
{
    int x,y;
    Coordinate(int a1, int b1) : x(a1),y(b1) { }
    void operator()(int a,int b)
    {
        x=a;
        y=b;
    }
};
Quad::Quad()
{
    cord=new Coordinate[4](0,0);
}
ругается на предпоследнюю строчку, как быть?
в другом классе запись вида
C++
1
cord=new Coordinate(0,0);
работает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2013, 13:47     new не работает со структурой у которой перегружены скобки
Посмотрите здесь:

Задание со структурой. C++
помогите со структурой C++
C++ Составить программу, в которой определяется строка, сумма элементов которой наибольшая
Работа со структурой C++
Дана строка, содержащая латинские буквы и скобки. Если скобки расставлены правильно - вывести 0. Иначе - номер позиции, где есть ошибочная скобка C++
Программа из книги, в которой осуществляется вызов двух функций не работает C++
C++ со структурой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
21.01.2013, 13:51     new не работает со структурой у которой перегружены скобки #2
operator() тут вообще непричем. Не замечаешь, что у тебя эти две записи не одинаковые?
error: parenthesized initializer in array new
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
21.01.2013, 13:52     new не работает со структурой у которой перегружены скобки #3
Tiva, при выделении с помощью new[] все объекты конструируются с помощью конструктора по умолчанию; использовать для этого другой конструктор не получиться.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
21.01.2013, 13:53  [ТС]     new не работает со структурой у которой перегружены скобки #4
Цитата Сообщение от Герц Посмотреть сообщение
operator() тут вообще непричем. Не замечаешь, что у тебя эти две записи не одинаковые?
error: parenthesized initializer in array new
а что в них не одинакового?
в одном случае мне надо 1 элемент выделить с значениями 0,0, а другом массив таких элементов.

Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
Tiva, при выделении с помощью new[] все объекты конструируются с помощью конструктора по умолчанию; использовать для этого другой конструктор не получиться.
ясно, а какие варианты? malloc? как тогда это написать? просто я малок никогда вообще не использовал
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
21.01.2013, 13:56     new не работает со структурой у которой перегружены скобки #5
Цитата Сообщение от Tiva Посмотреть сообщение
а какие варианты?
Добавить конструктор по умолчанию.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
21.01.2013, 13:59  [ТС]     new не работает со структурой у которой перегружены скобки #6
Цитата Сообщение от gray_fox Посмотреть сообщение
Добавить конструктор по умолчанию.
да, уже сделал, теперь программа крашится
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
struct Coordinate
{
    int x,y;
    Coordinate(){}
    Coordinate(int a1, int b1) : x(a1),y(b1) { }
    void operator()(int a,int b)
    {
        x=a;
        y=b;
    }
};
class Point
{
protected:
    Coordinate *cord;
public:
    Point();
    Point(Coordinate&);
    ~Point();
};
Point::Point()
{
    cord=new Coordinate(0,0);
}
Point::Point(Coordinate& c)
{
    cord->x=c.x;
    cord->y=c.y;
}
Point::~Point()
{
    delete cord;
}
class Quad:public Point
{
public:
    Quad(Coordinate *cord);
    Quad(Coordinate&);
    Quad();
    ~Quad();
    void print();
};
void Quad::print()
{
    for(int i=0; i<4; i++)
    {
        cout<<"("<<cord[i].x<<"; "<<cord[i].y<<")\n";
    }
}
Quad::Quad(Coordinate& c1)
{
    Point::Point(c1);
}
Quad::Quad()
{
    cord=new Coordinate[4];
    for(int i=0; i<4; i++)
    {
        cord[i].x=0;
        cord[i].y=0;
    }
}
Quad::~Quad()
{
    delete[] cord;
}
 
int main(void)
{
    Coordinate c(1,2);
    Point p(c);
    system("pause");
}
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
21.01.2013, 14:02     new не работает со структурой у которой перегружены скобки #7
C++
1
2
3
4
Quad::Quad(Coordinate& c1)
{
    Point::Point(c1);
}
Это как? У меня даже не скомпилилось.

C++
1
2
3
4
5
Quad::Quad(Coordinate& c1)
    :Point(c1)
{
    
}
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
21.01.2013, 14:04  [ТС]     new не работает со структурой у которой перегружены скобки #8
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
2
3
4
Quad::Quad(Coordinate& c1)
{
    Point::Point(c1);
}
Это как? У меня даже не скомпилилось.

C++
1
2
3
4
5
Quad::Quad(Coordinate& c1)
    :Point(c1)
{
    
}
билдер откомпилил
но краш не в этом, в мейне то я объявлял родительский класс Point и ошибка в другом конструкторе, только не могу понять в чем ошибка.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
21.01.2013, 14:08     new не работает со структурой у которой перегружены скобки #9
Цитата Сообщение от Tiva Посмотреть сообщение
class Quadublic Point
Во-первых, зачем вообще наследование, во-вторых, в курсе, как работают конструкторы\деструкторы? Получается:
C++
1
2
3
4
coord = new Coordinate(0, 0); // В конструкторе Point
coord = new Coordinate[4];    // В конструкторе Quad - утечка памяти
delete[] coord;  // В деструкторе Quad
delete coord; // В деструторе Point - delete к тому, что уже освобождено
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
21.01.2013, 14:10     new не работает со структурой у которой перегружены скобки #10
Цитата Сообщение от Tiva Посмотреть сообщение
только не могу понять в чем ошибка.
C++
1
2
3
4
5
Point::Point(Coordinate& c)
{
    cord->x=c.x;
    cord->y=c.y;
}
На что тут указывает coord? Память-то не выделена, вот и краш.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2013, 14:19     new не работает со структурой у которой перегружены скобки
Еще ссылки по теме:

C++ можете привести пример программы со структурой данных, и объяснить как она работает
Реализовать программу, в которой перегружены функции для определения минимального из трех своих аргуентов C++
Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки C++
C++ как работает fwrite() и fread() со структурой?
C++ Исправить ошибку, при которой не работает cin после vector'a (лишний символ '\n' в потоке ввода)

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

Или воспользуйтесь поиском по форуму:
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
21.01.2013, 14:19  [ТС]     new не работает со структурой у которой перегружены скобки #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Во-первых, зачем вообще наследование, во-вторых, в курсе, как работают конструкторы\деструкторы? Получается:
C++
1
2
3
4
coord = new Coordinate(0, 0); // В конструкторе Point
coord = new Coordinate[4];    // В конструкторе Quad - утечка памяти
delete[] coord;  // В деструкторе Quad
delete coord; // В деструторе Point - delete к тому, что уже освобождено
наследование по заданию
что значит утечка памяти?
как это относится к крашу программы? я же не вызываю вообще конструкторы Quad, только Point... не понимаю..

Добавлено через 5 минут
краш исправил, спасибо, глупейшая ошибка, забыл выделить память
Yandex
Объявления
21.01.2013, 14:19     new не работает со структурой у которой перегружены скобки
Ответ Создать тему
Опции темы

Текущее время: 14:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru