No matching function for call to c ошибка

No matching function for call to c++ error comes when argument of function is not matching as per expected in function.

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

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.

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

Доброго времени суток.

В качестве некоторой предыстории скажу, что начать изучать С++ довелось совсем недавно, и в процессе возникла некоторая неопределенность

При попытке реализовать наследование классов(в простейшем виде, но с header’ом) выдаёт ошибку:
«error: no matching function for call to ‘myclass::myclass()'»(ругается на файл myclass.cpp)

код «программы»

main.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
#include <iostream>
#include<string>
 
using namespace std;
 
#include "myclass.h"
 
int main()
{
    string str;
    cout <<"Insert The String..."<<endl;
    getline(cin, str);
 
    int a;
    cout <<"Insert The Number..."<<endl;
    cin >>a;
 
    myclassDerived theOne(str, a);
    theOne.set_b(str);
    theOne.set_d(a);
    theOne.show_all();
    cout<<endl;
    return 0;
 
}

myclass.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
#ifndef MYCLASS_H_INCLUDED
#define MYCLASS_H_INCLUDED
 
#include <string>
 
using namespace std;
 
 
class myclass
{
public:
    myclass(string s);
    void set_b(string s);
    string get_b();
    void show_b();
private:
    string b;
};
 
class myclassDerived: public myclass
{
public:
    myclassDerived(string strng, int i);
    void set_d(int i);
    int get_d();
    void show_d();
    void show_all();
private:
    int d;
 
};
 
#endif // MYCLASS_H_INCLUDED

myclass.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include<string>
 
 
using namespace std;
 
#include "myclass.h"
 
 
 
myclass::myclass(string s)
{
    set_b(s);
}
 
void myclass::set_b(string s)
{
    b = s;
}
 
string myclass::get_b()
{
    return b;
}
 
void myclass::show_b()
{
    cout <<"The String is: "<< get_b()<<endl;
}
 
myclassDerived::myclassDerived(string strng, int i)
{
    set_d(i);
    set_b(strng);
}
 
void myclassDerived::set_d(int i)
{
    d = i;
}
 
int myclassDerived::get_d()
{
    return d;
}
 
void myclassDerived::show_d()
{
    cout << "The Number is" << get_d()<<endl;
}
void myclassDerived::show_all()
{
    cout <<"The String is "<< get_b()<<"The Number is" << get_d()<<endl;
}

возможно, я допускаю какую-то очень нубскую ошибку, но не вижу её?

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


Recommended Answers

The error messages are fairly straightforward: most of the member functions you are calling do not actually exist. You need to define and implement a constructor for Node which accepts a string as an argument, plus all of the member functions which you are using ( SetNorth() , etc).

Jump to Post

All 3 Replies

Member Avatar


Schol-R-LEA

1,446



Commie Mutant Traitor



Featured Poster


11 Years Ago

The error messages are fairly straightforward: most of the member functions you are calling do not actually exist. You need to define and implement a constructor for Node which accepts a string as an argument, plus all of the member functions which you are using ( SetNorth() , etc).

Edited

11 Years Ago
by Schol-R-LEA because:

n/a

Member Avatar

11 Years Ago

I fixed the code with your suggestions and now I’m getting this error

Maze2.cpp:129: undefined reference to `MazeConstructor::Nodes(basic_string<char, string_char_traits<char>, __default_alloc_template<0, 0> >)'
Maze2.cpp:130: undefined reference to `MazeConstructor::Nodes(basic_string<char, string_char_traits<char>, __default_alloc_template<0, 0> >)'
Maze2.cpp:131: undefined reference to `MazeConstructor::Nodes(basic_string<char, string_char_traits<char>, __default_alloc_template<0, 0> >)'
Maze2.cpp:132: undefined reference to `MazeConstructor::Nodes(basic_string<char, string_char_traits<char>, __default_alloc_template<0, 0> >)'
Maze2.cpp:133: undefined reference to `MazeConstructor::Nodes(basic_string<char, string_char_traits<char>, __default_alloc_template<0, 0> >)'

here is my code

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Node
{
public:
    string name;
    Node* north;
    Node* south;
    Node* east;
    Node* west;
	      Node();
      Node(char data);
      void SetEast(Node EastNode);
      void SetSouth(Node SouthNode);
      void SetWest(Node WestNode);
      void SetNorth(Node NorthNode);
      Node* GetEast();
      Node* GetSouth();
      Node* GetWest();
      Node* GetNorth();
      string GetName();
      void SetName(char element2);
      void readMaze();
      Node* searchArray(Node* target);
      Node getCurrentRoom();
      int getNumMoves();
      string getDirections();
      void currentRoom();
      
      int counter;
      Node *array[12];
      //Node *east;
      string tempString;
      string filename;
      int numMoves;
      string directions;
      Node *northLinked, *southLinked, *eastLinked, *westLinked;
      Node *current;
      Node *finish;
      string element1;
      string element;
      //Node *south, *east, *west;
      int numSteps;
      string possibleWays;
      string currently, choice;
};

class MazeConstructor
{
private:
    Node nodes[12];
public:
    Node* ConstructMaze();
	 Node* Nodes(string);
	 string name;
	 
	 
};

Node::Node(char data)
   {
      element = data;
      north = NULL;
      south = NULL;
      east = NULL;
      west = NULL;
   }
    Node::Node()
   {
   }
    void Node::SetName(char element2)
   {
      element = element2;
   }
    string Node::GetName()
   {
      return element;
   }

 void Node::SetNorth(Node NorthNode)
   {
      north = &NorthNode;
   }
	
    void Node::SetSouth(Node SouthNode)
   {
      south = &SouthNode;
   }
	
    void Node::SetEast(Node EastNode)
   {
      east = &EastNode;
   }
	
    void Node::SetWest(Node WestNode)
   {
      west = &WestNode;
   }
	
    Node* Node::GetNorth()
   {
          
      return north;
   }
	
    Node* Node::GetSouth()
   {
      return south;
   }
	
    Node* Node::GetEast()
   {
      return east;
   }
	
    Node* Node::GetWest()
   {
      return west;
   }


Node* MazeConstructor::ConstructMaze()
{
    nodes[0] = *Nodes("A");
    nodes[1] = *Nodes("B");
    nodes[2] = *Nodes("C");
    nodes[3] = *Nodes("D");
    nodes[4] = *Nodes("E");
    nodes[5] = *Nodes("F");
    nodes[6] = *Nodes("G");
    nodes[7] = *Nodes("H");
    nodes[8] = *Nodes("I");
    nodes[9] = *Nodes("J");
    nodes[10] = *Nodes("K");
    nodes[11] = *Nodes("L");

    string filename;
    int index = 0;

    cout << "Please enter the name of the file:";
    cin >> filename;
    filename += ".txt";

    string tempString;
    ifstream inStream;

    //inStream.open(filename.c_str());
    //inStream.open("filename");
    int test = inStream.peek();

    while(!inStream.eof() && test != EOF)
    {
        getline(inStream, tempString);
        cout << tempString << endl;

        //The north connection
        string tempChar = tempString.substr(2,1);
        if(tempChar == "*")
        {
            Node* temp(NULL);
            nodes[index].SetNorth(*temp);
        }
        else
        {
            for(int i = 0; i < 12; i++)
            {
                if(nodes[i].GetName() == tempChar)
                {
                    nodes[index].SetNorth(nodes[i]);
                    cout << "Set north to: " <<nodes[i].GetName() <<endl;
                }
            }
        }

        //The east connection
        tempChar = tempString.substr(4,1);
        if(tempChar == "*")
        {
            Node* temp(NULL);
            nodes[index].SetEast(*temp);
        }
        else
        {
            for(int i = 0; i < 12; i++)
            {
                if(nodes[i].GetName() == tempChar)
                    nodes[index].SetEast(nodes[i]);
            }
        }

        //The south connection
        tempChar = tempString.substr(6,1);
        if(tempChar == "*")
        {
            Node* temp(NULL);
            nodes[index].SetSouth(*temp);
        }
        else
        {
            for(int i = 0; i < 12; i++)
            {
                if(nodes[i].GetName() == tempChar)
                    nodes[index].SetSouth(nodes[i]);
            }
        }

        //The west connection
        tempChar = tempString.substr(8,1);
        if(tempChar == "*")
        {
            Node* temp(NULL);
            nodes[index].SetWest(*temp);
        }
        else
        {
            for(int i = 0; i < 12; i++)
            {
                if(nodes[i].GetName() == tempChar)
                    nodes[index].SetWest(nodes[i]);
            }
        }
    }

    inStream.close();
    Node* startNode;
    startNode = &nodes[0];
}

class Navigation
{
private:
    int stepsTaken;
public:
    Navigation(){ stepsTaken = 0;}
    void NavigateMaze(Node* startNode);
};

void Navigation::NavigateMaze(Node* startNode)
{
    bool finished = false;
    string direction;

    while(!finished)
    {
        cout << "GIMME A DIRECTION";
        cin >> direction;
        if(direction == "N")
        {
            cout << "Before" <<endl;
            startNode = startNode->GetNorth();
            cout << "After" <<endl;
        }
        else if(direction == "E")
            startNode = startNode->GetEast();
        else if(direction == "S")
            startNode = startNode->GetSouth();
        else if(direction == "W")
            startNode = startNode->GetWest();
        else if(startNode->GetName() == "L")
        {
            cout << "You finished!" << endl;
            finished = true;
        }
    }
}

int main()
{

    MazeConstructor mazeConstructor;
    Navigation mazeNavigator;

    Node* startNode = mazeConstructor.ConstructMaze();
    mazeNavigator.NavigateMaze(startNode);
    return 0;
}

Member Avatar


Schol-R-LEA

1,446



Commie Mutant Traitor



Featured Poster


11 Years Ago

In the MazeConstructor class, you define a method named Nodes() (not the plural), but you never implement it anywhere. I suspect that what you actually want is the constructor for the Node class, however, which you do define (though incorrectly, I think — the data argument should be a string, not a single character).

On an unrelated note, I think you will want to change the definition of the nodes[] array to

Node * nodes[12];

This is because the individual elements of nodes[] has to hold a pointer to a Node , rather than a Node object. An even better solution might be to use a vector :

vector<Node*> nodes;

This takes away the size limit on the number of Node pointers.

I would also recommend separating the file into separate header and implementation files for the different classes, as this will make it much, much easier to read and reason about. You will need to have all of the different files together in a single Makefile or Project, depending on just what IDE and compiler you’re using, but this isn’t a very difficult process. For example, I’d previously taken earlier version of the Node class and broke it into a MazeNode.h header file and a MazeNode.cpp implementation file:

MazeNode.h

#ifndef MAZE_NODE_H
#define MAZE_NODE_H

#include <string>

class Node
{
private:
    std::string name;
    Node* north;
    Node* south;
    Node* east;
    Node* west;

public:
    Node(std::string n = " ");

    Node* GetNorth() { return north; };
    Node* GetSouth() { return south; };
    Node* GetEast()  { return east;  };
    Node* GetWest()  { return west;  };
    std::string GetName() { return name; };

    void SetNorth(Node *direction) { north = direction; };
    void SetSouth(Node *direction) { south = direction; };
    void SetEast(Node *direction)  { east  = direction; };
    void SetWest(Node *direction)  { west  = direction; };
};

#endif

MazeNode.cpp

#include <string>
#include "MazeNode.h"

Node::Node(std::string n): name(n)
{
    north = 0;
    south = 0;
    east = 0;
    west = 0;
}

These don’t have the changes you’ve added, but you should be able to see the idea here.

Edited

11 Years Ago
by Schol-R-LEA because:

n/a


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.

ошибка: нет соответствующей функции для вызова

#include <iostream>
using namespace std;

template <typename x> x functionA (x, x);

int main ()
{
    functionA <double, double, double> (1, 1) << "n";
}

template <typename x> x functionA (x arg1, x arg2)
{
    return arg1 + arg2;
}

Этот код приводит к:

error: no matching function for call to ‘functionA(int, int)’

Какие могут быть причины?

Здесь есть две ошибки. Во-первых, вам нужно указать только один тип для шаблона:

functionA<double>(1, 1)

Во-вторых, вам не хватает std::cout в начале этой строки.

Создан 01 сен.

Это не верно: functionA <double, double, double> (1, 1). Вы пытаетесь позвонить functionA() с тремя параметрами шаблона, а ваше объявление functionA имеет только 1 параметр шаблона.

Кроме того, << "n"; после звонка тоже смысла нет.

Создан 01 сен.

В шаблоне функции есть только один параметр шаблона, и вы передаете 3 аргументы шаблона к нему:

functionA <double, double, double> (1, 1) << "n";

почему 3 аргументы шаблона?

Просто пиши:

functionA <double> (1, 1);

Или вы можете просто позволить компилятору вывести аргумент шаблона, как:

functionA(1.0, 1.0);  //template argument deduced as double!
functionA(1, 1);     //template argument deduced as int!

Создан 01 сен.

Строка должна быть,

std::cout << functionA <double> (1, 1) << "n";
^^^^^^^missing          ^^^^^^only 1 argument

Потому как, functionA принимает только 1 аргумент шаблона, поэтому вам следует звонить явно только с одним аргументом шаблона.

Три аргумента необходимы в том случае, если бы ваш functionA было похоже,

template <typename x, typename y, typename z>
x functionA (y arg1, z arg2)
{
    return arg1 + arg2;
}

Создан 01 сен.

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

std::cout << functionA(1, 1) << std::endl;

Создан 01 сен.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

c++
templates

or задайте свой вопрос.

Понравилась статья? Поделить с друзьями:
  • No match for argument phpmyadmin error unable to find a match phpmyadmin
  • No match file in multi fd ошибка
  • No mans sky ошибка подключения
  • No mans sky ошибка драйвера vulkan
  • No mans sky как изменить язык