Bcc32c error no matching function for call to strcpy

Не работает strcpy C++ Builder Решение и ответ на вопрос 2997362

Volchonok_kill

2 / 2 / 0

Регистрация: 09.10.2020

Сообщений: 88

1

09.06.2022, 17:47. Показов 1349. Ответов 8

Метки нет (Все метки)


Всем привет, столкнулся с проблемой strcpy, попробовал поискать в инете — у всех разные случаи ошибок и разные методы решения.

C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    filename=new char [20];
    if(Edit1->Text!="")
    strcpy(filename,Edit1->Text.c_str( ));
    else ShowMessage("Не введено имя файла");
}

При компиляции выдает ошибку:
[bcc32c Error] Unit1.cpp(24): no matching function for call to ‘strcpy’

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Модератор

8254 / 5477 / 2248

Регистрация: 21.01.2014

Сообщений: 23,576

Записей в блоге: 3

09.06.2022, 18:20

2

Volchonok_kill, а какова глобальная задача? Мы же в Билдере, может, можно без сишных функций и методов работы обойтись?



0



2 / 2 / 0

Регистрация: 09.10.2020

Сообщений: 88

09.06.2022, 18:26

 [ТС]

3

Да я просто выполняю задание, компилирую код и делаю отчет, исправляя при это маленькие погрешности в коде. Глобальная задача — Создать текстовый файл из строк Memo. Имя файла вводится в Edit. Определить количество строк файла длиной более 10 символов. Вывести в Memo1 строки, в которых есть “abc”.

Миниатюры

Не работает strcpy
 



0



D1973

Модератор

8254 / 5477 / 2248

Регистрация: 21.01.2014

Сообщений: 23,576

Записей в блоге: 3

09.06.2022, 20:34

4

Лучший ответ Сообщение было отмечено Volchonok_kill как решение

Решение

Цитата
Сообщение от Volchonok_kill
Посмотреть сообщение

Создать текстовый файл из строк Memo. Имя файла вводится в Edit.

C++
1
Memo1->Lines->SaveToFile(Edit1->Text);

Цитата
Сообщение от Volchonok_kill
Посмотреть сообщение

Определить количество строк файла длиной более 10 символов

C++
1
2
3
int L_Count = 0;
for(int i = 0; i < Memo1->Lines->Count; i++)
  if(Memo1->Lines->Strings[i].Length() > 10) L_Count++;

Цитата
Сообщение от Volchonok_kill
Посмотреть сообщение

Вывести в Memo1 строки, в которых есть “abc”.

А текст тогда где, если не в Мемо1? Ну пусть будет в Мемо2

C++
1
2
for(int i = 0; i < Memo2->Lines->Count; i++)
  if(Memo2->Lines->Strings[i].Pos("abc") > 0) Memo1->Lines->Add(Memo2->Lines->Strings[i]);



1



Практикантроп

4773 / 2673 / 517

Регистрация: 23.09.2011

Сообщений: 5,725

09.06.2022, 22:14

5

Цитата
Сообщение от Volchonok_kill
Посмотреть сообщение

[bcc32c Error] Unit1.cpp(24): no matching function for call to ‘strcpy’

У вас внутри скобок c_str() — пробел; мой BCB5 это спокойно проглотил, но может быть более строгая проверка синтаксиса в новых студиях заартачилась? И еще… — надо понимать, что переменная filename из вашего примера где-то ранее уже создана, а в обработчике Button1Click только инициализируется?



0



2 / 2 / 0

Регистрация: 09.10.2020

Сообщений: 88

09.06.2022, 22:24

 [ТС]

6

Цитата
Сообщение от nick42
Посмотреть сообщение

У вас внутри скобок c_str() — пробел; мой BCB5 это спокойно проглотил, но может быть более строгая проверка синтаксиса в новых студиях заартачилась? И еще… — надо понимать, что переменная filename из вашего примера где-то ранее уже создана, а в обработчике Button1Click только инициализируется?

Хз, убрал пробел — безрезультатно, какая была ошибка, такая и осталась. По поводу версии, я юзаю RAD 11 версию. Да, Filename ранее уже описывался, а сейчас инициализируется. Честно говоря, я уже весь интернет перерыл, но так и не нашел ответ на мою ошибку, у всех по сути практически одна и та же ошибка, но из-за различия кодов, у всех решение разное

Миниатюры

Не работает strcpy
 



0



Volchonok_kill

2 / 2 / 0

Регистрация: 09.10.2020

Сообщений: 88

09.06.2022, 23:11

 [ТС]

7

Цитата
Сообщение от D1973
Посмотреть сообщение

int L_Count = 0;
for(int i = 0; i < Memo1->Lines->Count; i++)
  if(Memo1->Lines->Strings[i].Length() > 10) L_Count++;

Извините, а вы не подскажите как этот код работает, я запихнул его в кнопку и при компиляции когда нажимаю на кнопку ничего не происходит.
Вот вставил код в кнопку:

C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int L_Count = 0;
    for(int i = 0; i < Memo1->Lines->Count; i++)
    if(Memo1->Lines->Strings[i].Length() > 10) L_Count++;
}

Как бы не пытался работать с этим кодом — ответа 0, также я не понял в какой части кода он заносит значения, мне бы вообще желательно надо чтобы значения заносились в Edit2, но здесь че-то прям все очень плохо.



0



Модератор

8254 / 5477 / 2248

Регистрация: 21.01.2014

Сообщений: 23,576

Записей в блоге: 3

10.06.2022, 04:21

8

Лучший ответ Сообщение было отмечено Volchonok_kill как решение

Решение

Цитата
Сообщение от Volchonok_kill
Посмотреть сообщение

мне бы вообще желательно надо чтобы значения заносились в Edit2

Ну а как я должен был об этом догадаться? Вы же нигде об этом ни единым словом не обмолвились

Цитата
Сообщение от Volchonok_kill
Посмотреть сообщение

как этот код работает

Очень просто. Предполагается, что текст, в котором мы будем искать строки длиннее 10 символов, находится в Мемо1
1. Объявляем переменную, в которой будем хранить число подходящих строк
2. В цикле обходим все строки компонента Мемо1
3. Проверяем длину каждой строки. Если эта длина больше 10 — увеличиваем счетчик строк
4. Все, что осталось — вывести полученное значение. Вот только сама идея использовать для вывода компонент, предназначенный для ввода — она, как бы, совсем не очень. Почему метку не взять для этих целей?

Миниатюры

Не работает strcpy
 



1



2 / 2 / 0

Регистрация: 09.10.2020

Сообщений: 88

10.06.2022, 08:30

 [ТС]

9

D1973, спасибо большое за помощь !



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

10.06.2022, 08:30

Помогаю со студенческими работами здесь

Не работает strcpy()
Нужно вывести строку &quot;Hello, World!&quot; из строки &quot;pt Hello, World!;&quot;:

#include &lt;stdio.h&gt;
#include…

strcpy
Условная часть кода, где построчно с файла считываются названия станций и записываются в str. Они…

strcpy
прога пашет,но после сортировки по результату,он выдает какойто корявый список,тоесть strcpy…

strcpy
Недавно начал программировать на C++, в типах плохо ещё разбираюсь… не могу понять, что надо…

strcpy
Условная часть кода, где построчно с файла считываются названия станций и записываются в str. Они…

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

Или воспользуйтесь поиском по форуму:

9

I’m getting these errors. On the first line and second line, it says No matching function for call to ‘strcpy’, i’m pretty sure im using the wrong preprocessor directive, I’m using #include < fstream>

void writeStudents(vector<student> &studentVector){
ifstream studentinfo;
studenttowrite allinfo;
studentinfo.open("students.bin");
for (unsigned int x=0 ; x<studentVector.size(); x++) {
    allinfo.StuNo = studentVector[x].StuNo;
    strcpy(allinfo.FirstName, studentVector[x].FirstName);
    strcpy(allinfo.LastName, studentVector[x].LastName);
    allinfo.major = studentVector[x].major;
    allinfo.college = studentVector[x].college;
    allinfo.Age     = studentVector[x].Age;
    allinfo.Gpa     = studentVector[x].Gpa;
    studentinfo.write(reinterpret_cast<char *>
                    (&studentVector[x]), sizeof(student));
}

asked Dec 10, 2014 at 8:34

Huzaifa Imran's user avatar

4

To use std::strcpy() (equivalent of C strcpy()) function including fstream is not enough, you must include cstring:

#include <cstring>

Also (not knowing what types are student and allinfo.FirstName, allinfo.LastName) arguments of std::strcpy() must be convertible to char* and const char*.

answered Dec 10, 2014 at 9:28

zoska's user avatar

zoskazoska

1,64411 silver badges23 bronze badges

1

Ситуация такая:

Пишу цикл, который будет проверять каждое значение из ListBox1, на наличие значения из ListBox2.

При попытке компиляции ругается аж на несколько строк, 2 из которых это strcpy, и одна это strstr в if-е.

Мой код:

Код:

for (i = 0; i < ListBox2->Items->Count; i++)
{
strcpy(okno,ListBox2->Items->Strings.w_str()); //сюда ругается первой парой ошибок

          for (i2 = 0; i2 < ListBox1->Items->Count; i2++)
         {
          strcpy(okno2,ListBox1->Items->Strings[i2]); //сюда ругается второй парой ошибок

                    if (strstr(okno,okno2) == 0) //сюда ругается последней ошибкой
                    {
                         Application->MessageBoxW(L«ЧИТЕР»,L«Попался»,MB_OK);
                         HWND hWnd4=FindWindow(NULL,L«RF Online»);
                         SendMessage(hWnd4,WM_CLOSE,0,0);
                         Application->Terminate();
                     }
         }
}

Ошибки:
[BCC32 Error] Unit9.cpp(73): E2034 Cannot convert ‘int’ to ‘char *’
[BCC32 Error] Unit9.cpp(73): E2342 Type mismatch in parameter ‘__dest’ (wanted ‘char *’, got ‘char’)

[BCC32 Error] Unit9.cpp(80): E2034 Cannot convert ‘int’ to ‘char *’
[BCC32 Error] Unit9.cpp(80): E2342 Type mismatch in parameter ‘__dest’ (wanted ‘char *’, got ‘char’)

[BCC32 Error] Unit9.cpp(82): E2285 Could not find a match for ‘strstr(char,char)’

Поскольку не охота подтирать значения сообщу — это античит, против школо-читеров. Он перебирает имена всех открытых окон на наличие «запрещённых» слов.

Что касается strstr — работает если я пишу к примеру strstr(«toolz»,»HideToolz»);

Прошу ткнуть меня носом в ошибку, ибо я пару часов сидел и бился над этими типами переменных (ох в php с этим проще…).

12 ответов

277

29 января 2011 года

arrjj

1.7K / / 26.01.2011

А if(ListBox2->Items->Strings==ListBox1->Items->Strings[i2]) религия не позволяет?
Ругается на твои переменные okno,okno2 ты их как объявлял?
Имхо Application->Terminate(); после первого найденого окна невариант, у него может быть 2 окна открыто.

Тысяча первое подтверждение того, что пхп развращает умы юных программистов.

Итак, приступим.
[BCC32 Error] Unit9.cpp(82): E2285 Could not find a match for ‘strstr(char,char)’
Из текста ошибки видно, что ты объявлял okno и okno2 как char. Надо же объявлять как char[], то есть массив символов. И передается в strstr указатели на первые элементы в массиве строк-char. Тут можно прочитать про адресацию немного, будет полезно. (* — знак указателя на переменную).

[BCC32 Error] Unit9.cpp(73): E2342 Type mismatch in parameter ‘__dest’ (wanted ‘char *’, got ‘char’)
Собственно суть проблемы та же. Вместо char[] имеем char.

[BCC32 Error] Unit9.cpp(80): E2034 Cannot convert ‘int’ to ‘char *’
Понять эту ошибку я не смог, другие противоречат ей. Нужно побольше кода раскрыть.

66K

29 января 2011 года

Oskaria

5 / / 29.01.2011

А if(ListBox2->Items->Strings==ListBox1->Items->Strings[i2]) религия не позволяет?
Ругается на твои переменные okno,okno2 ты их как объявлял?
Имхо Application->Terminate(); после первого найденого окна невариант, у него может быть 2 окна открыто.

Нет не позволяет, ибо имя окна может быть «Speed hack» или «Wall Hack», ну и ещё куча информации про версию или автора. Мне необходимо искать 1 слово в фразе (предложении, как вам смешнее).

Что касается переменных okno и okno2 они объявлены:
char okno[50];
и
char okno2[50];

Далее, я выгружаю игру, а не чит, поэтому мне достаточно спалить одно окно и выгрузить игру, другие окна меня не интересуют.

Чуть по-позже буду у своего компьютера, и открою всё событие кнопки.

Что же касается конкретно StrStr — StrPos возвращает ту же ошибку… По не понятной для меня причине, строковая переменная не хочет конвертироваться в чар.

Ошибка про int меня тоже смутила — никогда бы не подумал, что ListBox1->Items->Strings[3] может вернуть не текст, даже не цифры текстом, а какое-то число…

Что касается PHP скажу — в нём программировать, в плане типов переменных, проще, вы не можете с этим не согласиться. Мне построить большое приложение на пхп — раз плюнуть, начал изучать си и вот, сижу, считаю и конвертирую… Очень хочется научиться, но в книгах пишут «делай c_str() — и будет тебе счастье» — без пояснений (как например про указатель) мало чего понятно.

Нашёл пример с int:
int a = 5;
int *p = &a;
с чарами дело обстоит так же?

Кто работал с билдером вплотную — ответьте на такой вопрос: в MS VC++, как и полагается, имя массива считается указателем на нулевой элемент, в билдере это сохраняется? Просто вообще говоря, чтобы никогда не натыкаться на подобные ошибки, лучше писать вместо

Код:

strcpy(okno,ListBox2->Items->Strings.w_str());

вот так:

Код:

strcpy(&okno[0], ListBox2->Items->Strings.w_str());

По остальным ошибкам аналогично.

Цитата:

Что касается PHP скажу — в нём программировать, в плане типов переменных, проще, вы не можете с этим не согласиться. Мне построить большое приложение на пхп — раз плюнуть…

Когда пишут реально большие приложения, редко что просто так оставляют на откуп интерпретатору. ;)

Цитата:

в книгах пишут «делай c_str() — и будет тебе счастье»

В грамотных книгах так не пишут. :) Почитайте Страуструпа и снимите навсегда все вопросы по поводу С++.

277

29 января 2011 года

arrjj

1.7K / / 26.01.2011

>>char okno[50];

Тогда не strcpy(okno,ListBox2->Items->Strings.w_str());
а strcpy(&okno,ListBox2->Items->Strings.w_str()); (аналогично и с другими функциями)

но тем неменее можно просто

Код:

if(strstr(ListBox2->Items->Strings.w_str(),ListBox1->Items->Strings[i2].w_str()))
{
//Закрываем окно
}

//Неуспел))

66K

29 января 2011 года

Oskaria

5 / / 29.01.2011

На:

Код:

strcpy(&okno[0], ListBox2->Items->Strings.w_str());

Говорит:
[BCC32 Error] Unit9.cpp(73): E2034 Cannot convert ‘wchar_t *’ to ‘const char *’

а на

Код:

if(strstr(ListBox2->Items->Strings.w_str(),ListBox1->Items->Strings[i2].w_str()))

говорит
[BCC32 Error] Unit9.cpp(77): E2285 Could not find a match for ‘strstr(wchar_t *,wchar_t *)’

ну а на

Код:

strcpy(&okno, ListBox1->Items->Strings.c_str()); (без [0])

говорит:
[BCC32 Error] Unit9.cpp(71): E2034 Cannot convert ‘char[50]’ to ‘char *’

Я хоть маленький и глупый, но все эти варианты уже перебрал, вот всё событие кнопки (без изменений с указателями)

Код:

void __fastcall TForm9::Button1Click(TObject *Sender)
{
//Вот тут замучился как собака с этими типами…
int i, j;

char okno[50];
char okno2[50];

//HWND hWnd4=FindWindow(NULL,StrPos(L»hack»));
//SendMessage(hWnd4,WM_CLOSE,0,0);

for (i = 0; i <= ListBox2->Items->Count; i++)
{
strcpy(&okno, ListBox1->Items->Strings.c_str());
strcpy(&okno2, ListBox2->Items->Strings.c_str());

                 for (j = 0; j <= ListBox1->Items->Count; j++)
                 {
                          if (strstr(ListBox1->Items->Strings[j].w_str(),ListBox2->Items->Strings.w_str()) == 0)
                          {
                          Application->MessageBoxW(L«ЧИТЕР»,L«Попался»,MB_OK);
                          HWND hWnd4=FindWindow(NULL,L«RF Online»);
                          SendMessage(hWnd4,WM_CLOSE,0,0);
                          Application->Terminate();
                          }
                 }
}

}

277

29 января 2011 года

arrjj

1.7K / / 26.01.2011

вместо if(strstr(ListBox2->Items->Strings.w_str(),ListBox1->Items->Strings[i2].w_str()))
сделай
if(strstr(ListBox2->Items->Strings.c_str(),ListBox1->Items->Strings[i2].c_str()))
или
if(wcsstr(ListBox2->Items->Strings.w_str(),ListBox1->Items->Strings[i2].w_str()))

535

29 января 2011 года

Нездешний

537 / / 17.01.2008

2 Oskaria
1. Не знаю, как там в самых новых билдерах, но C++ Builder 6 в интерфейсе поддерживал только ansi-строки. Т.е. в ListBox, TStrings и т.д. хранятся AnsiString, соответственно, вызов w_str для сравнения с содержимым другого листбокса неуместен.
2. Вместо strstr используйте метод AnsiString::Pos для определения вхождения подстроки. Это позволит избежать ненужных преобразований типов
3. for (i = 0; i <[COLOR=»Red»]=[/COLOR] ListBox2->Items->Count; i++) — при последней итерации цикла выходите за пределы массива. В результате, в зависимости от везения, получите AV, трудно уловимый блуждающий баг или … ничего :)

В общем, должно быть как-то так:

Код:

for (int i = 0; i < ListBox1->Items->Count; ++i)
{
    for (int j = 0; j < ListBox2->Items->Count; ++j)
    {
        if (ListBox1->Items->Strings.Pos(ListBox2->Items->Strings[j]) != 0)
        {…}
    }
}

66K

29 января 2011 года

Oskaria

5 / / 29.01.2011

в случае с wcsstr() я не могу понять, что возвращает эта функция… весь выход if воспринимает как true…
в случае же с if (ListBox1->Items->Strings.Pos(ListBox2->Items->Strings[j]) != 0) вылезает ошибка List index out of bounds (7), причём у меня 7 элементов только в списке искомых слов, делаю я <= или только < — результат всё равно List index out of bounds (7).

Этот выход из значения происходит даже если я делаю не 7 циклов, внутри 115 (~115 окон вместе с системными находит), но и если я делаю 115 циклов в семи.

535

29 января 2011 года

Нездешний

537 / / 17.01.2008

[QUOTE=Oskaria]в случае с wcsstr() я не могу понять, что возвращает эта функция[/QUOTE]»Если ничто другое не помогает, прочтите же, наконец, инструкцию!» (с)

А по поводу остального… Индексы точно не перепутал? Может, не заметил, что я в моем коде i от 0 до List1->Items->Count, а у тебя до List2->Items->Count? Ну и j соответственно

66K

29 января 2011 года

Oskaria

5 / / 29.01.2011

А не важно, как бы я не ставил ошибка одна и та же…

Цитата:

[BCC32 Error] Unit9.cpp(73): E2034 Cannot convert ‘wchar_t *’ to ‘const char *’

Эта ошибка из-за того, что у вас в свойствах проекта выставлена Юникод-кодировка, а не многобайтовая. В Юникоде строка — это wchar_t *, а в многобайтовой кодировке — char *. А вообще, действительно, последуйте совету Нездешнего и не путайте CRT со средствами билдера.

  • Forum
  • Beginners
  • using strings with fputs and strcpy

using strings with fputs and strcpy

I am trying to learn c++ by making a text game.
At the moment I have a problem.

I am using a string-array to hold my races.

1
2
3
4
5
6
std::string race[5];
race[0] = "God";
race[1] = "Human";
race[2] = "Orc";
race[3] = "Elf";
race[4] = "Dwarf";

And this neither fputs nor strcpy like so I tried this

1
2
3
4
char races[50];
int rX;
cin >> rX;
races = race[rX]

But this didn’t work either. Got this error:

incompatible types in assignment of `std::string’ to `char[50]’

The thing I wanna do is a array that holds the different races and after that
put it in a different variable that will save the value in a text file.
And to use fputs with a string didn’t work.

cannot convert `std::string’ to `const char*’ for argument `1′ to `int fputs(const char*, FILE*)’

Then to use strcpy didn’t work either.

no matching function for call to `strcpy(char[50], std::string&)’
candidates are: char* strcpy(char*, const char*)

Anyone know how I can do this?
If you didn’t understand what I try to do it’s this:
1. Start the program
2. Enter name, age, race
3. Save name, age and race in their own variables.
4. Use fputs to save the variables to a file

Name and age works perfect because they already are char but race is string
so it doesn’t wanna work with fputs or strcpy and I have no idea how to go
around this.

You don’t need fputs() or strcpy(). The std::string and std::ostream classes handle all that stuff for you.

1
2
3
4
5
6
string s = "Hello world!";

fputs( s.c_str(), stdout );  // output a c-string version of 's'
cout << s << 'n';           // output 's' the C++ way

string t = s;  // comparable to strcpy( t, s ), if s and t were char* 

Hope this helps.

Thanks, this worked fine!
fputs(race[rX].c_str(), sFile);

Do you know any good book?
I have C++ Programming by Stephen Prata and it didn’t cover this.
It doesn’t cover fputs at all.

I prefer a book in my lap rather then a web page or a PDF document.

Agreed. I’ve gotten pretty used to online documents though…

The reason your book doesn’t mention fputs(), etc is because they are standard C functions, not C++.

For a book: http://www.cplusplus.com/forum/windows/2733/

Hope this helps.

I have reported your spamming this topic.

There is no «advancing» to C++ from C. C is a different language to C++ with different purpose. It’s still VERY widely used and will continue to be so. Unless you consider Linus Torvalds someone who needs to «advance to C++»?

Topic archived. No new replies allowed.

When we are calling some function but there is not matching function definition argument, then we get compilation error as No matching function for call to c++. To resolve this error, We need to pass appropriate matching argument during function call. Or need to create different overloaded function with different arguments.

error: no matching function for call to
error: no matching function for call to

Check function calling and function definition argument data types. It must be same.

#include <iostream>
using namespace std;

class A
{
    public:
        void setValue(int value);
        int value;
};

void A::setValue(int value)
{
    value++;
}

int main(int argc, char** argv) 
{
    A obj; 
    obj.setValue(obj);  // ERROR: No matching function for call to
    return 0;
}

Output | error: no matching function for call to

no matching function for call to
no matching function for call to

Here if you see we are passing Class object inside setValue() function calling argument. But if we check in setValue() function definition that we expect passing argument value as integer. So here function calling argument and expected arguments are not matching so we are getting error of no matching function for call to c++.

no matching function for call
no matching function for call

[SOLUTION] How to resolve “No matching function for call to” c++ error ?

int main(int argc, char** argv) 
{
    A obj; 
    int value=0;
    obj.setValue(value); 
    return 0;
}

Here we just modified setValue() function argument as integer. So it will be match with function definition arguments. So no matching function for call to c++ error will be resolve.

Frequently asked queries for No Matching function for call:

1. no matching function for call to / no matching function for call

If function call and function definition arguments are not matching then you might get this error. Depend on compiler to compiler you might get different errors. Sometimes it also give that type mismatch or can not convert from one data type to another.

No matching function for call

2. error: no matching function for call to

You will get error for no matching function call when generally you are passing object / pointer / reference in function call and function definition is not able to match and accept that argument.

Conclusion:

Whenever you are getting no matching function for call to c++ error then check function arguments and their data types. You must be making mistake during function calling and passing mismatch argument or you might be require to add new function with similar matching data type. After checking and adding suitable function argument change your error will be resolve. I hope this article will solve your problem, in case of any further issue or doubt you can write us in comment. Keep coding and check Mr.CodeHunter website for more c++ and programming related articles.

Reader Interactions

Member Avatar

14 Years Ago

#include<stdio.h>
#include<conio.h>
#include<string>
#include <iostream>
#include<stdlib.h>
#include "convert.h"

using namespace std;
int check(string);
string send(string);
string hr_str;

int main()
{
    int result=2,n;
    char tt[7];
    char h[2],m[2],s[2];
    cout<<"nEnter the Time ";
      
    string colon=":";     
    while(result !=1)
    {
      printf("nHR -> ");
      scanf("%s",h);
    result= check(h);
    }
    
    
  cout<<"nMain Fun"<<hr_str;
 string t_time;
 strcpy (t_time,hr_str);//-----problem is here
  
 
   
        
    getch();
}

int check(string str)
{
     char *end_ptr;
    long long_var;
    int int_var,i=0;
   // char buff[2]=" ";
   char buff[str.size()];
str.copy(buff,str.size(),0);
     
     long_var = strtol(buff, &end_ptr, 0);
        
        if (ERANGE == errno)
        {
            puts("number out of rangen");
        }
        else if (long_var > INT_MAX)
        {
            printf("%ld too large!n", long_var);
        }
        else if (long_var < INT_MIN)
        {
            printf("%ld too small!n", long_var);
        }
        else if (end_ptr == buff)
        {
            printf("not valid numeric inputn");
            return 2;
        }
        
         #if 0
         else if ('' != *end_ptr)
         {
                     printf("extra characters on input linen");
         }
         #endif
        
        else
        {
            int_var = (int)long_var;
            printf("The number %d is OK!n", int_var);
            
            
            if( int_var>=0 &&  int_var<=9)
            {
                 std::string str = "0" + stringify( int_var);
                 printf("n1 digit");
                 cout<<"n"<<str;
                 send(str);
                
            }
            else if( int_var>9 &&  int_var<24)
            {
                printf("n2 digit");
                 std::string str = stringify( int_var);
                   cout<<"n"<<str;
                   send(str);
                  
            }
            else if(int_var>23)
            {
                 
                 printf("nEnter correct value");
                 return 2;
            }        
             return 1;
            
        }
        
            
}



string send(string aaa)
{
       hr_str=aaa;
       
       cout<<"nin Fun"<<hr_str;
    
}

It gives error
no matching function for call to `strcpy(std::string&, std::string&)’
How to solve it??


Recommended Answers

@Saba: The code you posted is pretty bad. It uses void main() instead of int main(), uses depreciated header files (c++ no longer uses .h extension in its standard headers), and mixes C and C++ strings, and adds absolutely NOTHING to the thread that has not already been said.

Jump to Post

All 3 Replies

Member Avatar


Narue

5,707



Bad Cop



Team Colleague


14 Years Ago

strcpy is for C-style strings, not C++ string objects.

>How to solve it??
Change that line to this:

t_time = hr_str;

Member Avatar

13 Years Ago

here it is

#include<iostream.h>
#include<string.h>
void main()
{
char str1[30],str2[30];
int l1,l2,i;

cout<<"enter first string: ";
cin>>str1;
cout<<"enter first string: ";
cin>>str1;

l1=strlen(str1);
l2=strlen(str2);

for(i=0;i<=l2;i++)
{
str1[i]=str2[i];
}
cout<<str1<<endl;
}

Edited

13 Years Ago
by peter_budo because:

Keep it Organized — For easy readability, always wrap programming code within posts in [code] (code blocks)

Member Avatar


Ancient Dragon

5,243



Achieved Level 70



Team Colleague



Featured Poster


13 Years Ago

@Saba: The code you posted is pretty bad. It uses void main() instead of int main(), uses depreciated header files (c++ no longer uses .h extension in its standard headers), and mixes C and C++ strings, and adds absolutely NOTHING to the thread that has not already been said.


Reply to this topic

Be a part of the DaniWeb community

We’re a friendly, industry-focused community of developers, IT pros, digital marketers,
and technology enthusiasts meeting, networking, learning, and sharing knowledge.

Hello all,

I have written a simple program that acts like a tollbooth in the sense that whenever a car passes, a .50 toll is added to the total double «money» the code is written so that after 20 cars pass, the total money collected should be $10.00. Upon attempting to compile the code, I get multiple compiler errors stating there is no matching function for call to error, even though the function is initialized and programmed correctly[to my knowledge]. why is this error occurring? any help would be much appreciated!

code:

#include <iostream>

using namespace std;

class TollBooth {
private:
    int car;
    double bills;
public:
     void convars(int cars, double money) {
     car = cars;
     bills = money;
    }
    void init(int cars, double money) {
    cars=0;
    money=0;
    }
    void PayingCars(int cars, double money) {
    for (int i=0; i<cars; i++) {
            money+=.50;
    }
    }
    void print(int cars, double money) {
    cout << "out of " << cars << "cars, the total money collected was: " << money;
    }
};

int main()
{
TollBooth e;
e.init(20,0);
e.PayingCars();
e.print();
}

compilers output:

||=== Build: Debug in hot stuff (compiler: GNU GCC Compiler) ===|
C:UsersGordonDesktopcpp shithot stuffmain.cpp||In function 'int main()':|
C:UsersGordonDesktopcpp shithot stuffmain.cpp|32|error: no matching function for call to 'TollBooth::PayingCars()'|
C:UsersGordonDesktopcpp shithot stuffmain.cpp|18|note: candidate: void TollBooth::PayingCars(int, double)|
C:UsersGordonDesktopcpp shithot stuffmain.cpp|18|note:   candidate expects 2 arguments, 0 provided|
C:UsersGordonDesktopcpp shithot stuffmain.cpp|33|error: no matching function for call to 'TollBooth::print()'|
C:UsersGordonDesktopcpp shithot stuffmain.cpp|23|note: candidate: void TollBooth::print(int, double)|
C:UsersGordonDesktopcpp shithot stuffmain.cpp|23|note:   candidate expects 2 arguments, 0 provided|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

I am a beginner at C++ and am trying to learn myself from a textbook. Any help would be much appreciated and please no toxicity in comments! [first post in subreddit]

The no matching function for call to C++ constructor error appears when the identification of the called process does not match the argument. For instance, whenever the compiler specifies no matching functions or methods exist, it indicates the compiler identified a function by an exact name in the command’s parameter.

Henceforth, we wrote this detailed no matching function for call to C++ array debugging guide to help you remove this annoying code exception without affecting other processes. In addition, we will help you recreate the no matching function for call to ‘getline C++ exception using standard elements and procedures that will help you pinpoint the bug.

Contents

  • Why Is the No Matching Function for Call to C++ Bug Happening?
    • – Creating Public Classes in the Main Function
    • – Calling Commands With Invalid Parameters
    • – Failing To Read the Standard Halts All Procedures
  • How To Resolve the No Matching Function for Call to C++ Mistake?
    • – Repair the Compiler Defaults
  • Conclusion

Why Is the No Matching Function for Call to C++ Bug Happening?

The C++ no matching function for call to default constructor error happens and affects your programming experience when the identification of the called process does not match the argument. As a result, this error indicates the system cannot recognize the data type in your document due to identical names.

So, the no matching function for call to Arduino mistake can obliterate your program if you introduce many properties with identical ids. Consequently, the system will fail to read the adequate role, confusing developers about why and where the script launches exceptions, although all elements appear functional.

In addition, unfortunately, this creates unexpected obstacles because sometimes scanning the complete code will be essential to remove the no matching function for call to printf bug. However, we are far from discussing the possible debugging methods because you must learn how to recreate the full invalid exception and output.

So, the message is almost inevitable when we continue to pass the specific incorrect method or wrong parameter set to the function. The program will launch the no matching function for call to max C++ error because the function’s definition specifies the method’s name to the compiler.

In addition, your script explicitly declares the entire broken function or command content. As a result, having identical ids for several properties confuses your application and blocks further procedures launched by the incorrect command.

– Creating Public Classes in the Main Function

You will likely experience the no matching function for call to ‘stoi mistake when creating public classes in the primary function using typical elements. Unfortunately, as explained before, the syntax includes a few ids that provoke the system to launch the error.

You can learn more about the primary function and properties in the following example:

class Employee

{

private:

string empId;

string empName;

int joiningYear;

int joiningMonth;

int joiningDate;

public:

Employee()

{

empId = “<<EMPTY>>”;

empName = “<<EMPTY>>”;

joiningYear = 0;

joiningMonth = 0;

joiningDate = 0;

}

Epmloyee(string id, string name, int year, int month, int date)

{

empId=id;

empName=name;

joiningYear=year;

joiningMonth=month;

joiningDate=date;

}

string getId()

void display(Employee emp)

{

cout<<“ID: “<<emp.getId()<<endl;

cout<<“Name: “<<emp.getName()<<endl;

cout<<“Joining Year: “<<emp.getYear()<<endl;

cout<<“Joining Month: “<<emp.getMonth()<<endl;

cout<<“Joining Date: “<<emp.getDate()<<endl;

}

};

int main()

{

Ply e1;

Ply e2(“BC210207935”, “Mehboob Shaukat”, 2021, 04, 01);

cout<<“Ply 1 Using default Constructor:”<<endl;

e1.display(e1);

cout<<“Ply 1 having Ply 2 copied data member values”<<endl;

e1.setValues(&e2);

e1.display(e1);

return 0;

}

Although the tags and values appear correct, your system displays an exception indicating the broken functions. The following example provides the absolute error:

main.cpp: In member function ‘int Employee::Epmloyee(std::string, std::string, int, int, int)’:

main.cpp:28:3: warning: no return statements in the function returning non-void [-Wreturn-type]

28 | }

| ^

main.cpp: In function ‘int main()’:

main.cpp:69:60: error: no matching functions for calls to ‘Employee::Employee(const char [12], const char [16], int, int, int)’

main.cpp:13:3: note: candidate expects 0 arguments, 5 provided

main.cpp:3:7: note: candidate: ‘Employee::Employee(const Employee&)’

Unfortunately, the error can happen if your code calls specific commands with invalid parameters.

– Calling Commands With Invalid Parameters

Your system can sometimes prevent you from completing the code when your script calls several commands with invalid parameters.

Although this happens rarely, it can produce unexpected mistakes, especially with complex applications with many procedures. Therefore, we will show you a syntax that blocks the main function and halts further processes.

The following example provides the broken code:

#include <iostream> // cout

#include <algorithm> // random_shuffle

#include <vector> // vector

class deckOfCards

{

private:

vector<Card> deck;

public:

deckOfCards();

void shuffle(vector<Card>& deck);

Card dealCard();

bool moreCards();

};

int deckOfCards::count = 0;

int deckOfCards::next = 0;

deckOfCards::deckOfCards()

{

const int FACES = 12;

const int SUITS = 4;

int currentCard = 0;

for (int face = 0; face < FACES; face++)

{

for (int suit = 0; suit < SUITS; suit++)

{

Card card = Card(face,suit);

deck.push_back (card);

currentCard++;

}

}

}

void deckOfCards::shuffle(vector<Card>& deck)

{

random_shuffle(deck.begin(), deck.end());

for (iterr = deck.begin(); iter!=deck.end(); iter++)

{

Card currentCard = *iterr;

random_shuffle(deck.begin(), deck.end());

Card randomCard = deck[num];

}*/

}

Card deckOfCards::dealCard()

{

#include <iostream>

#include “deckOfCards.h”

using namespace std;

int main(int argc, char** argv)

{

deckOfCards cardDeck;

cardDeck.shuffle(cardDeck);

while (cardDeck.moreCards() == true)

{

cout << dealCard(cardDeck);

}

return 0;

}

After running the command and launching the properties, your system will display the following error:

[Error] no matching functions for calls to ‘deckOfCards::shuffle(deckOfCards&)’

[Note] candidate is:

In file included from main.cpp

[Note] void deckOfCards::shuffle(std::vector<Card>&)

[Note] no recognized conversion for argument 1 from the ‘deckOfCards’ to ‘std::vector<Card>&’

[Error] ‘dealCard’ was not declared in this procedure

This script calls the shuffle command with a failed parameter, which blocks further operations.

– Failing To Read the Standard Halts All Procedures

This article’s last invalid chapter recreates the matching function error in C++ and fails to read the standard, which halts all processes. Unfortunately, predicting when and where this happens is almost impossible, especially if you have a script with many operations and elements.

As a result, we will show you a short code snippet that launches the bug in the editing window, which affects the child tags, although the standard is not related. In addition, the template includes a few voids and targets that compile the application.

The following example provides the script that fails to read the standard:

#include <string>

#include <iostream>

template <typename T, template <typename> class data_t = std:: vector>

void push_back_all (std:: vector <T> & target, data_t <T> const & data) {

std:: size_t previous_length = target.size();

target.resize (previous_length + data.size());

std:: copy (data.begin(), data.end(), target.begin() + previous_length);

}

int main(){

std:: vector <char> result;

std:: string a = “hello there”;

push_back_all (result, a); // “No matching function for call to ‘push_back_all’”

for (auto ch: result)

std:: cout << ch << std:: endl;

return 0;

}

Although appearing insignificant, the incorrect message indicates inconsistencies. Learn more about the message below:

Compilation failed due to following error(s).

main.cpp: In function ‘int main(int, char**)’:

main.cpp:19:21: error: no matching functions for calls to ‘A::setValue(A&)’

obj.setValue(obj);

main.cpp:11:6: note: candidate: void A::setValue(int)

void A::setValue(int value)

main.cpp:11:6: note: no recognized conversion for argument 1 from ‘A’ to ‘int’

This example completes our guide on recreating the mistake, so it is time to apply the most sophisticated debugging approaches.

How To Resolve the No Matching Function for Call to C++ Mistake?

You can resolve the no matching function for call to C++ error by providing corresponding and functional parameters to the broken function. In addition, you can quickly obliterate the bugged message by introducing different parameters for the various overloaded functions. Luckily, both approaches will not affect secondary processes and elements.

In addition, you can remove this error by changing the code to meet the command’s expectations. This procedure ensures your template has fair inputs the system can render effortlessly.

But first, let us simplify the script, as shown below:

template <typename A, typename B = int>

struct MyType {};

template <template <typename> class data_t>

void push_back_all (data_t <char> const & data) {

}

int main(){

MyType <char, int> Var;

push_back_all (Var); //

return 0;

}

Furthermore, as explained before, you can modify the properties to meet the function’s needs. The following example provides the best approach:

#include <vector>

#include <string>

#include <iostream>

template <typename T, template <typename, typename, typename > class data_t = std:: vector, typename _Traits, typename _Alloc>

void push_back_all (std:: vector <T> & target, data_t <T, _Traits, _Alloc> const & data) {

std:: size_t previous_length = target.size();

target.resize (previous_length + data.size());

std::copy (data.begin(), data.end(), target.begin() + previous_length);

}

int main(){

std:: vector <char> result;

std:: string a = “hello there”;

push_back_all (result, a);

for (auto ch: result)

std:: cout << ch << std:: endl;

return 0;

}

As you can tell, this method repairs this article’s last chapter that recreates the bug. Luckily, you can apply it to all documents and applications.

– Repair the Compiler Defaults

The second debugging approach fixes the compiler defaults that confuse your system. Follow the steps in this bullet list to delete the code exception:

  • Choose Compiler Options in the tool menu.
  • Select the Settings tab that appears in the pop-up windows.
  • Locate and choose Code Generation in the next tab.
  • Click on the arrow on the right on the Language Standard line.
  • Choose ISO C++ 11 from the list box and press OK.

The mistake should disappear, and you can complete the project without further complications or errors.

Conclusion

The no-matching function for the call in C++ error appears when the identification of the called process does not match the argument. As a result, we explained the following critical points to help you debug the code:

  • Checking the parameters of the required methods and their data type is critical
  • We usually make mistakes when writing the arguments in the functions
  • You can allow the process by providing the matched parameter
  • Adding a new role in the exact data type set should remove the mistake

We are confident that you will no longer experience this annoying exception after applying these debugging principles. Luckily, the methods apply to similar matching function errors.

  • Author
  • Recent Posts

Position is Everything

Position Is Everything: Your Go-To Resource for Learn & Build: CSS,JavaScript,HTML,PHP,C++ and MYSQL.

Position is Everything

Понравилась статья? Поделить с друзьями:
  • Bcc32 error bcc32 exited with code 1
  • Bcc 8 ofx 64bit error 1316 указанная учетная запись уже существует
  • Bc4 ошибка принтера
  • Bc2 самсунг ошибка
  • Bc 22163 05 iveco ошибка