Ошибка компилятора c2563

description title ms.date f1_keywords helpviewer_keywords ms.assetid

Learn more about: Compiler Error C2563

Compiler Error C2563

11/04/2016

C2563

C2563

54abba68-6458-4ca5-894d-3babdb7b3552

Compiler Error C2563

mismatch in formal parameter list

The formal parameter list of a function (or a pointer to a function) does not match those of another function (or pointer to a member function). As a result, the assignment of functions or pointers cannot be made.

The following sample generates C2563:

// C2563.cpp
void func( int );
void func( int, int );
int main() {
   void *fp();
   fp = func;   // C2563
}

dron44rus

0 / 0 / 0

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

Сообщений: 45

1

Несоответствие в списке формальных параметров

15.01.2016, 21:33. Показов 9773. Ответов 6

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


Студворк — интернет-сервис помощи студентам

Ошибка 1 error C2563: несоответствие в списке формальных параметров (17 строка)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
#include <cmath>
using std:: cout;
using std:: cin;
using std:: endl;
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "RUSSIAN");
    float n;
    double b = 0.0;
    const double x= 4.2;
    for (n=1; n<=8; n++){
        if (n<= 3)
            b+=pow(cos*n+sin*n,2);
    }
    cout << "ответ b = " << b  << endl;
    system("pause");
    return 0;
}



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

15.01.2016, 21:33

6

399 / 378 / 408

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

Сообщений: 1,204

15.01.2016, 21:42

2

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

b+=pow(cos*n+sin*n,2);

функции так не пишут

cos() , sin()



0



59 / 59 / 24

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

Сообщений: 1,602

15.01.2016, 21:42

3

dron44rus, что за cos и sin?



0



Croessmah

Неэпический

17815 / 10586 / 2044

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

Сообщений: 26,628

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

15.01.2016, 21:43

4

C++
1
cos*n

Косинус скольки умножить на n?



0



HidForce

59 / 59 / 24

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

Сообщений: 1,602

15.01.2016, 21:45

5

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

Решение

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

функции так не пишут
cos() , sin()

+ еще надо передать какое-нибудь значение в эти функции

Добавлено через 2 минуты
dron44rus, скорее всего это должно выглядеть так:

C++
1
b+=pow(cos(x)*n+sin(x)*n,2);



1



2644 / 2220 / 239

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

Сообщений: 8,064

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

15.01.2016, 21:50

6

Да уж. Подобные темы надо начинать с описания того. что должна делать программа, что и по какой формуле считать.



0



0 / 0 / 0

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

Сообщений: 45

15.01.2016, 21:52

 [ТС]

7

все получилось. Спасибо



0



a3.cpp(75): error C2563: mismatch in formal parameter list

I’m certain I’m passing the function checkout with 3 doubles, I don’t know why I’m getting the error I am. Please help.

#include <iostream>
#include <cstdlib>
using namespace std;

 const double peanut_PRICE = 1.80;
 const double peanut_SHIP = 0.50;
 const double BOOK_PRICE = 9;
 const double BOOK_SHIP = 1.06;
 const double MOVIE_PRICE = 13.99;
 const double MOVIE_SHIP = 0.05;

 double checkout (double myamountofbooks, double myamountofmovies, double mypoundsofpeanuts)
 {
  myamountofbooks = myamountofbooks * (BOOK_PRICE + BOOK_SHIP);
  myamountofmovies = myamountofmovies * MOVIE_PRICE * (1 + MOVIE_SHIP);
  mypoundsofpeanuts = mypoundsofpeanuts * (peanut_PRICE + peanut_SHIP);
  return (myamountofbooks + myamountofmovies + mypoundsofpeanuts);

 }

 bool validUserImput (int whereUserWantsToGoNext)
 {

  if (whereUserWantsToGoNext > 50 || whereUserWantsToGoNext < 0)
   return false;
  else return true;

 }

 bool validUserImput (double whereUserWantsToGoNext)
 {

  if (whereUserWantsToGoNext > 50 || whereUserWantsToGoNext < 0)
   return false;
  else return true;

 }

int main()
{
 //===========================Declaration Statements==================================
 double amountofbooks = 0;
 double amountofmovies = 0;
 double poundsofpeanuts = 0;
 int whereUserWantsToGoNext = 0;


  while (! (whereUserWantsToGoNext == 4) ) 
  {
   cout << "1. Booksn2. Peanutsn3. Moviesn4. Checkoutn" << endl;
   cin >> whereUserWantsToGoNext; 
   if (!validUserImput(whereUserWantsToGoNext)) cout << "INVALID IMPUT" << endl;

   if (whereUserWantsToGoNext == 1){
    cout << "Please enter your number of books";
    cin >> amountofbooks;
    if (!validUserImput(amountofbooks)) cout << "INVALID IMPUT" << endl;
   }

   if (whereUserWantsToGoNext == 3){
    cout << "Now please enter the number of movies you've selected";
    cin >> amountofmovies; 
    if (!validUserImput(amountofmovies)) cout << "INVALID IMPUT" << endl;
   }

   if (whereUserWantsToGoNext == 2) {
    cout << "Please enter the weight(in pounds) of your peanuts";
    cin >> poundsofpeanuts;
    if (!validUserImput(poundsofpeanuts)) cout << "INVALID IMPUT" << endl;
   }
   if (validUserImput == 4) cout << "Total Cost is..." << checkout(amountofbooks, amountofmovies, poundsofpeanuts);
  }
 cin >> amountofbooks;
 }

BenMorel's user avatar

BenMorel

33.5k49 gold badges174 silver badges310 bronze badges

asked Oct 27, 2010 at 18:50

mike's user avatar

2

The problem is here:

if (validUserImput == 4) ...

validUserImput is a function, but you are not calling that function, you are trying to compare it to 4.

If you wanted to keep track of the number of valid inputs you received, you could instead add a new variable that you manually increment on every valid input.

answered Oct 27, 2010 at 19:01

sth's user avatar

sthsth

218k53 gold badges277 silver badges364 bronze badges

The last if — you are comparing function pointer to an integer. try this:

if (validUserImput(3) == 4) cout << "Total Cost is..." << checkout(amountofbooks, amountofmovies, poundsofpeanuts);

answered Oct 27, 2010 at 18:57

BЈовић's user avatar

BЈовићBЈовић

61.3k41 gold badges174 silver badges266 bronze badges

2

I assume you want to display the result of the checkout function if the user selects 4. So you probably wanted to write:

   if (whereUserWantsToGoNext == 4) cout << "Total Cost is..." << checkout(amountofbooks, amountofmovies, poundsofpeanuts) << endl;

answered Oct 27, 2010 at 19:07

Charles Salvia's user avatar

Charles SalviaCharles Salvia

51.7k12 gold badges127 silver badges140 bronze badges

  • Remove From My Forums
  • Question

  • Hi,

    atm I am porting a project from VS 2013 Update 4 to the new VS 2015. Most things works without problem, but now I have a compile error I can’t understand. I made a screenshot of the source.

    ‘createFunc’ of data has the type ‘void*’. ‘createProcessModule’  is a template function. Now I want to store the address of the explicitly created function in this pointer variable. This results in ‘error C2563: mismatch in formal parameter list’.

    But if I store the address in a local variable created with autom then it works. This is confusing for me and I would like to know why.

Answers

  • The C++ standard says that that template functions are to be treated as overloaded functions in this case:

    «13.4/1 A use of an overloaded function name without arguments is resolved in certain contexts to a function, a pointer to function or a pointer to member function for a specific function from the overload set. A function template name is considered
    to name a set of overloaded functions in such contexts. The function selected is the one whose type is identical to the function type of the target type required in the context.»

    The type required in this context happens to be «void*». Not only that «void*» doesn’t carry enough information to allow overload resolution to be performed but if you follow the standard strictly (VC++ doesn’t) it’s not even
    possible to convert a function pointer to «void*».

    That said, I find rather peculiar that this works if you assign to an auto variable but Clang and GCC behave like this as well. If 3 different compilers complain about this kind of code then you can conclude that the code is indeed incorrect.

    IMO a better solution than using auto is to case to the expected pointer type:

    data.createFunc = static_cast<void*(*)()>(createProcessModule<ModuleType>);
    
    • Marked as answer by

      Tuesday, August 18, 2015 2:37 AM

Skeever

0 / 0 / 0

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

Сообщений: 227

1

09.02.2020, 20:34. Показов 2683. Ответов 6

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


Доброго времени суток, можете пожалуйста пояснить природу этой ошибки? Задание сделать шаблоны функций инициализации и вывода массива. Тема для меня сырая, некоторые задачи поделал. а вот с этой никак не выходит. С первой функцией проблем нет,а вот вторая выдает вышеуказанную ошибку.

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
#define SIZE 4
#include <iostream>
#include <iomanip>
using namespace std;
template <typename Task1>
void initialization(Task1 array[][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            cout << "Enter element [" << i << "][" << j << "]: ";
            cin >> array[i][j];
        }
        cout << "n";
    }
}
template <typename Task1>
void output(Task1 array[][SIZE]) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            cout << setw(6) << array[i][j] << " ";
        }
        cout << "n";
    }
    cout << "n";
}
 
int main() {
    int array[SIZE][SIZE];
    initialization(array);
    output(array);
    return 0;
}

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

0

Нарушитель

8388 / 4391 / 1009

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

Сообщений: 20,566

09.02.2020, 20:38

2

На этапе компиляции ошибка-то?
А то, это… Ага…

Ошибка mismatch in formal parameter list

1

elenayagubova

337 / 237 / 103

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

Сообщений: 407

09.02.2020, 21:45

3

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

Решение

ошибку вижу, но другую

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

for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {

C++
1
2
for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {

1

0 / 0 / 0

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

Сообщений: 227

09.02.2020, 21:59

 [ТС]

4

elenayagubova, в ней и дело,спасибо. Преимущества свежего взгляда очевидны ))

0

337 / 237 / 103

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

Сообщений: 407

09.02.2020, 22:03

5

d8veloper, вообще нормальный компилятор должен был подчеркнуть это место с вопросом «что? не знаю я никакого size!» ))

0

0 / 0 / 0

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

Сообщений: 227

09.02.2020, 22:07

 [ТС]

6

elenayagubova, я уже об этом подумал.Надо будет преподавателя спросить.

0

Mental handicap

1245 / 623 / 171

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

Сообщений: 2,429

09.02.2020, 22:18

7

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

я уже об этом подумал.Надо будет преподавателя спросить.

Так он вам ошибку и выдал:

Compiler Error C2563
mismatch in formal parameter list

The formal parameter list of a function (or a pointer to a function) does not match those of another function (or pointer to a member function). As a result, the assignment of functions or pointers cannot be made.

Compiler Error C2563

0

For a homework assignment we were provided with two header files. One contains the base class prototypes and definitions for a linked list. The other contains derived class prototypes and definitions for an unordered linked list. They were supposed to work just fine and be code we just stuck in our project and only called the functions for in the main function we built as the homework assignment. However I received a number of errors when I tried to compile. As part of fixing the errors the only change I’ve made to the unorderedLinkedList header file was adding

using linkedListType<Type>::first;
using linkedListType<Type>::last;

at the top because otherwise it was not recognizing the variables first and last from the base class. Now the only errors left are «mismatch in formal parameter list» for lines 84, 111, and 170 in unorderedLinkedList.h Two hours of Google haven’t helped me. As best I can tell the parameters in the function headings match the prototypes perfectly.

I’ve copied both the linkedList.h and unorderdLinkedList.h into a GitHub repository. I’m afraid I’m not familiar with GitHub, but I made it public, so hopefully this works. On another post I saw someone suggest using GitHub to share code for questions like this. This is my first Reddit post; so if I am doing anything wrong I would be happy to correct the style of this post.

Я пытаюсь сделать класс для задания. Предполагается, что он записывает, сколько времени требуется программе для запуска и сколько раз повторяется цикл, а затем помещает эту информацию в файл. Прямо сейчас он дает мне:

error 2298 "missing call to bound pointer to member function"

А также

error 2563 "mismatch in formal parameter list."

Мне трудно понять, как это исправить; это, вероятно, менее сложно, чем я делаю это, но любая помощь будет оценена по достоинству.

#include <thread>
#include <iostream>
#include <fstream>
#include <chrono>
#include <string>

using namespace std;

class Timer {
  private:
    typedef chrono::high_resolution_clock Clock;
    Clock::time_point epoch;
  public:
    Timer() {
        epoch = Clock::now();
    }
    Clock::duration getElapsedTime() { return Clock::now() - epoch; }
};

int loopCount()
{
    for (int count=0;count<=100;) {
        count++;
    }
    return count;
}

int fProjectDebugFile() 
{
    fstream debugFile;

    debugFile.open ("FinalProjectDebugger.txt", fstream::out | fstream::app);
    string jar(Timer);
    cout << jar << endl << loopCount() << endl;
    debugFile.close();
    return 0;
}

1 ответ

Вы не можете получить доступ к переменным цикла вне цикла.

Итак, переместите объявление за пределы цикла, т.е. замените это:

int loopCount(){
    for(int count=0;count<=100;){
         count++;}
return count;
}

С этим:

int loopCount()
{
    int count = 0;
    while (count <= 100)
    {
         count++;
    }
    return count;
}

Также это:

class Timer
...
string jar(Timer);

Не имеет большого смысла. Timer — это тип, поэтому string jar(Timer); объявляет функцию с именем jar, которая принимает объект Timer в качестве параметра и возвращает string.


1

Sid S
7 Дек 2019 в 08:12

Я получаю ошибку времени компиляции при компиляции шаблонной функции, ошибка:

ошибка C2563: несоответствие в списке формальных параметров

Не могу понять, в чем проблема, компилятор мало что говорит, вы понимаете, в чем проблема?

#include <cmath>    // temporary
#include <iostream>
#include <cassert>

namespace math
{
    //
    // Power function
    //
    template<typename Exp>
    double pow(double base, Exp exponent)
    {
        assert(!(base == 0 && exp <= 0));

        if (base == 0)
            return 0;

        if (exponent == 0 || base == 1)
            return 1;

        if (exponent == 1)
            return base;

        if (exponent < 0)
            return 1 / pow(base, -exponent);

        return base * pow(base, exponent - 1);
    }

    //
    // Power specialization for real exponents
    //
    template<>
    double pow(double base, double exponent)
    {
        // TODO: handle real negative exponents
        return exp(exponent * log(base));
    }
}

int main()
{
    // error C2563:  mismatch in formal parameter list
    std::cout << "pow" << std::endl;
    std::cout << math::pow(1, 2) << std::endl;
    std::cout << math::pow(0, 2) << std::endl;
    std::cout << math::pow(2, 0) << std::endl;
    std::cout << math::pow(3, -4) << std::endl;

    return 0;
}

1 ответ

Лучший ответ

Я подумал, что должен написать ответ, чтобы его увидели другие.

В комментарии Мартина Мортерола он объясняет, почему вы получаете ошибку.

Вы сравниваете функцию exp с 0. assert(!(base == 0 && exp <= 0));

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

Exp — это функция, доступная в заголовке cmath, которая возвращает экспоненциальную функцию base-e от x, которая возведена в степень x: ex.

Что касается того, почему GCC компилируется, кажется, что он полностью игнорирует строку assert, что можно увидеть на Godbolt, если мы посмотрим на сборку

https://godbolt.org/z/BZIw8z

Если мы заменим assert на static_assert, gcc выдаст ту же ошибку, что и clang

https://godbolt.org/z/UpQ6Ks


0

Rostin
20 Июн 2019 в 15:42

Я понимаю, что многие люди задают этот вопрос, и есть похожие на Stack Overflow, но я не могу понять их. Я надеюсь, что кто-то скажет мне, почему это происходит, но также и то, что происходит.

Я кодировал эту случайную программу, чтобы продемонстрировать, как отделить классы от основного файла, и я начал получать эту ошибку, и я пытаюсь понять, как ее исправить.

По сути, файл .cpp класса не работает, потому что каждая функция говорит, что класс в моем заголовочном файле не является классом или пространством имен, что неверно. Я просмотрел его десятки раз, и ничто не кажется неуместным, написанным неправильно или связанным неправильно, все файлы находятся в одном проекте и папке.

Соответствующие части кода:

main.cpp

#include "stdafx.h"#include <stdlib.h>
#include <iostream>
#include <time.h>
#include <cstdlib>
#include "IQclass.h"
using namespace std;int main()
{
IQclass IC;

srand(time(NULL));

IC.nameInput();
IC.multiplierSelection();
IC.setCycle();
IC.forLoop();

return 0;
}

IQclass.h

#ifndef IQCLASS_H
#define IQCLASS_Hclass IQclass
{
public:

//IQclass();

void nameInput();
void multiplierSelection();
void setCycle();
void calc();
void printIQ();
void randGen();
void forLoop();

};

#endif //IQCLASS_H

IQclass.cpp

#include "IQclass.h"#include "stdafx.h"#include <stdlib.h>
#include <iostream>
#include <time.h>
#include <cstdlib>

int y;
long int a;
int m;
int c;
char name[40];

using namespace std;

/* IQclass::IQclass()
{
cout << "ninitializing...nnn";  //dont ever do this i did it to be funny
typicaly constructers are used to set variables to a defualt state when the
object is created
_sleep(3000);
}

*/

void IQclass::nameInput()         (ERROR HERE Line 28)
{
cout << "What is your name?nn";
cin >> name;
}

void IQclass::multiplierSelection(){       (ERROR HERE Line 34)
cout << "nWhat should the multiplier be?nn ";
cin >> m;
}

void IQclass::setCycle() {           (ERROR HERE Line 39)
cout << "nwhat shoud the cycle be?nn";
cin >> c;
}

void IQclass::calc() {             (ERROR HERE Line 44)
a = y*m;
}

void IQclass::printIQ() {           (ERROR HERE Line 48)
cout << name << "'s IQ is probably: " << y << endl << "That times: " << m <<
" is " << a << endl << endl;
}

void IQclass::randGen() {                    (ERROR HERE Line 52)
y = rand() % 160;
};

void IQclass::forLoop() {            (ERROR HERE Line 56)
for (int x = 0; x < c;) {
randGen();
calc();
printIQ();
x = x + 1;
};
};

Ошибка:

C2653 'IQclass': is not a class or namespace name |File IQclass.cpp | line 28 |
C2653 'IQclass': is not a class or namespace name |File IQclass.cpp | line 34 |
C2653 'IQclass': is not a class or namespace name |File IQclass.cpp | line 39 |
C2653 'IQclass': is not a class or namespace name |File IQclass.cpp | line 44 |
C2653 'IQclass': is not a class or namespace name |File IQclass.cpp | line 48 |
C2653 'IQclass': is not a class or namespace name |File IQclass.cpp | line 52 |
C2653 'IQclass': is not a class or namespace name |File IQclass.cpp | line 56 |

1

Решение

когда я ввожу твой код в свой ноутбук (win7, VS2015). Такая же ошибка происходит.
Я просто немного изменяю в файле IQClass.cpp.

От:

#include "IQclass.h"#include "stdafx.h"

TO:

#include "stdafx.h"#include "IQclass.h"

Я думаю, что каждый раз мы должны сначала включать #include «stdafx.h».

2

Другие решения

Других решений пока нет …

Понравилась статья? Поделить с друзьями:
  • Ошибка компилятора c2535
  • Ошибка компилятора c2398
  • Ошибка компилятора c2371
  • Ошибка компилятора c2338
  • Ошибка компилятора c2131