Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C++ Function Calling

  1. Jan 15, 2010 #1
    Hello,

    I have been pretty good with this stuff...but this is the umteenth time I have run into this error. I have gone around it by just using the direct function in the code, but I really really want to master this function calling. My compilation error is always term does not evaluate to a function taking 1 (or two) arguements. Where am I going wrong? I did the current function that comes up with the error by the book. literally. Here is the code. The Error comes up at the Add_num (N1_n,N2_n).


    #include<iostream>
    #include<cmath>
    #include<math.h>
    #include"Formulas.h"
    double SQRT_NORM (double a);

    using namespace std;

    int main ()

    {
    bool again = false;
    do
    {
    double N1, N2, N1_n, N2_n, Newz, Add_num, USR_SQRT;
    char choice;


    cout<<"Enter a first of two positive numbers:"<<endl;
    cin>>N1;
    N1=N1_n;
    cout<<"Enter the second number of two positive numbers:"<<endl;
    cin>>N2;
    N2=N2_n;


    Add_num (N1_n,N2_n); HERE IS WHERE THE ERROR IS REPORTED

    SQRT_NORM (Newz);

    cout<<"The Magnitude of the complex number is:"<<endl;


    cout<< "\n Would you like to run the program again?";
    cin>> choice;


    if (choice == 'y')
    {
    again = true;
    system ("cls");
    }
    else
    again = false;
    } while (again);
    return 0;

    }

    //Below are the formulas used in this lab

    double Add_num (double a, double b)
    {
    double Add_num;
    Add_num = a+b;
    return Add_num;
    }

    double SQRT_NORM (double a)

    {
    double SQRT_NORM;
    SQRT_NORM = sqrt (a);
    return SQRT_NORM;
    }
     
  2. jcsd
  3. Jan 15, 2010 #2
    It's missing the function prototype

    double Add_num (double a, double b);
     
  4. Jan 15, 2010 #3

    Borg

    User Avatar
    Gold Member

    It's been a while since I've done C++ but, these look backwards to me:

    N1=N1_n;
    N2=N2_n;
     
  5. Jan 15, 2010 #4

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    Please note how I embedded in code blocks. You can do this manually or use the handy code block icon that is just above the window in which you type a post.

    Several problems here:
    (1) You declared Add_num as a variable, not a function. This is the cause of the immediate problem.

    (2) Even if you had declared Add_num correctly, your use of the function would accomplish *nothing*. The results are not being assigned to anything.

    (3) The same goes for the use of SQRT_NORM.

    (4) Nothing of interest is output.

    (5) Using the same name of a function and the name of a variable inside the function is a very bad idea.

    (6) Using ALL_CAPS for a function name is, in most places, strongly discouraged or even forbidden.
     
  6. Jan 15, 2010 #5
    Borg is right. You are attempting to assign an left-hand-value to an right-hand-value.

    The assignment goes the other way.

    Use N1_n = N1;
    and N2_n = N2;
     
  7. Jan 15, 2010 #6
    I could really use some help by seeing this done properly. I will then be able to match some verbage up too. I found the lack of prototype as soon as I posted. How do I make this a function, and not a variable? Please bear with the lack of understanding.
     
  8. Jan 15, 2010 #7
    This should work, more or less

    Code (Text):

    #include<iostream>
    #include<cmath>

    using namespace std;

    double SQRT_NORM (double a);
    double Add_num (double a, double b);

    int main ()
    {
       bool again = false;
       do
       {
       double N1, N2;
       char choice;


       cout<<"Enter a first of two positive numbers:"<<endl;
       cin>>N1;
       cout<<"Enter the second number of two positive numbers:"<<endl;
       cin>>N2;
       

       double sum = Add_num (N1,N2);
     
       double root = SQRT_NORM (sum);

       cout<<"The sum is:"<< sum << ", its square root is: " << root << endl;
       
       cout<< "Would you like to run the program again?";
       cin>> choice;


       if (choice == 'y')
        {
            again = true;
            system ("cls");
        }
        else
            again = false;
        } while (again);
        return 0;

    }

    //Below are the formulas used in this lab

    double Add_num (double a, double b)
    {
        double var;
        var = a+b;
        return var;
    }

    double SQRT_NORM (double a)
    {
        double var;
            var= sqrt (a);
        return var;
    }
     
     
  9. Jan 15, 2010 #8
    That is it! I figured it out on my own, but it is good to see that I didnt just tmake it work by some improper loophole. I have the whole thing finished now. The last part is to write a stub program. I have never done that before. I am assuming that I could give the user an option for a "self test"? I am assuming that I would take a value, run it through the program, reverse it, and hope that the origonal value is returned?
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook