0 / 0 / 0
Регистрация: 04.08.2014
Сообщений: 6
1

Использовать внешнюю функцию ToString в наследнике класса TObject

19.08.2014, 12:32. Показов 1213. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, помогите плиз с прогой, не могу понять как исправить ошибку (104-106 строки):
Extra parameter in call to _fastcall TObject::ToString()

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <iostream.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
 
bool NextPermutation(int* a, int n) {
        int j = n-2;
        while (j!=-1 && a[j] > a[j+1])
                j--;
        if (j == -1)
                return false;
        int k = n - 1;
        while (a[j] > a[k])
                k--;
        swap(a[j],a[k]);
        int l = j + 1, r = n - 1;
        while (l<r)
                swap(a[l++],a[r--]);
        return true;
}
 
int MinDistance(int* a, int n, int* arr, int* result1, int* result2, int eps)
{
        int i, middle, summ=0;
        for(i=0; i<n; i++)
        {
                summ+=arr[a[i]-1];
        }
        middle=summ/2;
        summ=0;
        i=0;
 
        while(summ<middle)
        {
                summ+=arr[a[i]-1];
                i++;
        }
        if(eps>summ)
        {
                eps=summ;
                for(int j=0; j<i; j++)
                {
                        result1[j]=arr[a[j]-1];
                        result2[j]=0;
                }
                for(int k=i; k<n; k++)
                {
                        result2[k]=arr[a[k]-1];
                        result1[k]=0;
                }
                return eps;
        }
        else
                return eps;
}
 
AnsiString ToString(int* a,int n)
{
        AnsiString ret = "";
        for(int i=0;i<n;i++)
                ret += IntToStr(a[i]) + " ";
        return ret;
}
 
AnsiString ToString1(double* a,int n)
{
        AnsiString ret = "";
        for(int i=0;i<n;i++)
                ret += FloatToStr(a[i]) + " ";
        return ret;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int n,eps=0;
        n=StrToInt(Edit1->Text);
        int* a = new int[n];
        int* arr = new int[n];
        int* result1 = new int[n];
        int* result2 = new int[n];
        for(int i=0; i<n; i++)
        {
                a[i]=i+1;
                arr[i] = rand() % 30;
                eps+=arr[i];
                result1[i]=0;
                result2[i]=0;
        }
        do
        {
                eps=MinDistance(a,n,arr,result1,result2,eps);
        }while(NextPermutation(a,n));    
        ListBox2->Items->Add(ToString(arr,n));        // Extra parameter in call to _fastcall TObject::ToString()
        ListBox3->Items->Add(ToString(result1,n));    // Extra parameter in call to _fastcall TObject::ToString()
        ListBox4->Items->Add(ToString(result2,n));      // Extra parameter in call to _fastcall TObject::ToString()
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2014, 12:32
Ответы с готовыми решениями:

Как передать метод класса во внешнюю функцию?
Необходимо чтобы пользователь выбрал метод класса и передал его в качестве аргумента функции

C++ Элемент класса в наследнике
Здравствуйте, нужна помощь. Как использовать элемент класса в наследнике? Выдаёт ошибки &quot; 'int...

Вызов функции родительского класса в наследнике
Подскажите, пожалуйста, можно ли вызвать функцию родительского класса если в наследнике уже есть...

В наследнике класса добавить в параметры переменную
Добрый день есть родительский класс class func_pearson(object): l = p = {'a': } #...

4
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
19.08.2014, 12:56 2
Builder, переименуйте свой метод от греха подальше. В вашем случае у вас вызывается не ваша бесклассовая функция ToString(int*,int), а ToString() - метод класса TObject, от которого унаследована TForm. Так как у TObject::ToString() нет перегрузки, которая принмает параметры (int*, int), билдер говорит об ошибке.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,428
Записей в блоге: 8
19.08.2014, 13:24 3
C++
104
105
106
        ListBox2->Items->Add(::ToString(arr,n));        // Ok
        ListBox3->Items->Add(::ToString(result1,n));    // Ok
        ListBox4->Items->Add(::ToString(result2,n));      // Ok
1
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
19.08.2014, 13:33 4
Builder, ага, kodv прав.
Попробуйте вот так:
C++
104
ListBox2->Items->Add( ::ToString(arr, n) );
или обернуть ее в пространство имен, чтоб наверняка:
C++
1
2
3
4
5
6
7
8
9
namespace MyStringSpace
{
  AnsiString ToString(int* a,int n)
  {
  ...
  }
}
...
ListBox2->Items->Add( MyStringSpace::ToString(arr, n) );
P.S.
C++
1
2
3
4
5
6
7
8
9
10
//---------------------------------------------------------------------------
template< typename T >
AnsiString ToString( T* a, int n )
{
        AnsiString ret = "";
        for( int i=0; i<n; i++ )
                ret += FloatToStr(a[i]) + " ";
        return ret;
}
//---------------------------------------------------------------------------
2
0 / 0 / 0
Регистрация: 04.08.2014
Сообщений: 6
20.08.2014, 13:09  [ТС] 5
Всем большое спасибо! Выручили!
0
20.08.2014, 13:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2014, 13:09
Помогаю со студенческими работами здесь

В наследнике не видно членов базового класса
в чем ошибка кто подскажет? )).... val не видит #include&lt;iostream&gt; #include&lt;conio.h&gt; using...

Как вызвать оператор базового класса в наследнике?
Всем привет! Имеется такая конструкция (мой вопрос - в комментарии к последнему классу): ...

Изменения названия переменной класса родителя в классе наследнике
Изменения названия переменной класса родителя в классе наследнике Возможно ли это, если да то как?...

Почему поле родительского класса не видимо в классе-наследнике?
Доброго времени суток! Прописал код с классом-наследником. И компилятор выдаёт, что нет доступа в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru