2014-03-25 52 views
0

所以,我得到一個錯誤,在VS 2012錯誤C4930,說操作溢出函數調用不正確調用

prototyped function not called (was a variable definition intended?) 

基本上所有的函數調用我與我的操作溢出功能所做的不由於某種原因被正確調用。我見過一些人寫自己的函數調用這樣

Comp_Num Comp_Num::operator- (Comp_Num &c1, Comp_Num &c2); 

當我在Comp_Num添加::在VS文本編輯器強調運營商有一個紅色的波浪線。

我也收到3鏈接2001年的錯誤。我爲雙r1_final和r2_final所做的變量聲明有問題。我認爲他們不是在他們的函數調用之外初始化他們的變量。這是總共的錯誤信息。

c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw5\complex_number.h(226): warning C4930: 'Comp_Num operator +(Comp_Num &,Comp_Num &)': prototyped function not called (was a variable definition intended?) 
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw5\complex_number.h(228): warning C4930: 'Comp_Num operator -(Comp_Num &,Comp_Num &)': prototyped function not called (was a variable definition intended?) 
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw5\complex_number.h(230): warning C4930: 'Comp_Num operator *(Comp_Num &,Comp_Num &)': prototyped function not called (was a variable definition intended?) 
Complex_Number.obj : error LNK2001: unresolved external symbol "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > Comp_Num::imag1" ([email protected][email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@A) 
Complex_Number.obj : error LNK2001: unresolved external symbol "public: static double Comp_Num::r1_final" ([email protected][email protected]@2NA) 
Complex_Number.obj : error LNK2001: unresolved external symbol "public: static double Comp_Num::r2_final" ([email protected][email protected]@2NA) 

這是代碼。我正在談論的部分是在operation()函數的底部。提前致謝。

#include <iostream> 
#include <String> 
#include <vector> 
#include <sstream> 

using namespace std; 

#ifndef Comp_Num 
class Comp_Num 
{ 
private: 
    std::vector <double> real; 
    std::vector <double> imag; 
    double real_in, real_in1, real_in2; 
    static double r1_final, r2_final; 
    std::string imag_in; 
    static std::string imag1; 
public: 
    Comp_Num(); 
    Comp_Num(double real_num, std::string img_num); 

    static std::vector <std::string> get_input(); 
    static std::vector <std::string> get_real(std::vector <string> complexnum1); 
    static std::vector <std::string> get_imag(std::vector <std::string> complexnum2); 
    static void display(std::vector <std::string> display1); 
    static void display2(std::vector <double> display3); 
    static std::vector <std::string> set_compnum(); 
    static std::vector <std::string> comp2real(std::vector <std::string> c2r); 
    static std::vector <double> real2double (std::vector<std::string> r2d); 
    static double double_const(std::vector<double> dc); 
    friend Comp_Num operator +(const Comp_Num &c3, const Comp_Num &c4); 
    friend Comp_Num operator -(const Comp_Num &c3, const Comp_Num &c4); 
    friend Comp_Num operator *(const Comp_Num &c3, const Comp_Num &c4); 
    static void operation(); 
    ~Comp_Num(); 
/* 
    double Comp_Num::operator+ (double add_num); 
    double Comp_Num::operator- (double sub_num); 
    double Comp_Num::operator* (double mul_num); 
    double Comp_Num::operator/ (double div_num); 
*/ 
}; 
#endif !Comp_Num 

Comp_Num::Comp_Num() 
{ 
    double real_in = 1; 
    string imag_in = "i"; 
}; 

Comp_Num::Comp_Num(double real_num, std::string imag_num) 
{ 
    double real_in = real_num; 
    string imag_in = imag_num; 
}; 

std::vector <string> Comp_Num::set_compnum() 
{ 
    std::vector <string>set_num= Comp_Num::get_input(); 
    std::vector<string>comp1=Comp_Num::get_real(set_num); 
    std::vector <string>comp2= Comp_Num::get_imag(set_num); 
    std::vector <string>cmp2rl_fin = Comp_Num::comp2real(comp2); 
    std::vector<double>finale = Comp_Num::real2double(cmp2rl_fin); 
    Comp_Num::double_const (finale); 
    imag1 = "i"; 
    Comp_Num *c1 = new Comp_Num(r1_final, imag1); 
    Comp_Num *c2 = new Comp_Num(r2_final, imag1); 

    Comp_Num::display(comp2); 
    std::system("pause"); 
    return(comp2); 
}; 

std::vector <string> Comp_Num::get_input() 
{ 
    std::string usr_input, input1; 
    std::vector <string> complex; 
    std::cout<<"Enter 2 imaginary numbers you would like to perform your operation on.\n"; 
    std::getline(std::cin, usr_input); 
    std::istringstream input(usr_input); 
    while(input >> input1) 
    { 
     complex.push_back(input1); 
    } 
    std::cout<<'\n'; 
    return (complex); 
}; 

std::vector <string> Comp_Num::get_imag(std::vector <string> complexnum2) 
{ 
    std::vector <string> imag1; 
    for(unsigned int i = 0; i < complexnum2.size(); ++i) 
    { 
     std::string str2 = ""; 
     std::vector<char> char1(complexnum2[i].begin(), complexnum2[i].end()); 
     for(unsigned int r = 0; r < char1.size(); ++r) 
     { 
      if(char1[r] >= '0' && char1[r] <= '9' || char1[r] == '-' || char1[r] == '.' || char1[r] == 'i') 
      { 
       str2 += char1[r]; 
       if(char1[r] == 'i') 
       { 
        imag1.push_back(str2); 
        continue; 
       } 
      } 
     } 
    } 
    return(imag1); 
}; 

std::vector <string> Comp_Num::get_real(std::vector <string> complexnum1) 
{ 
    std::vector <string> real1; 
    for(unsigned int i = 0; i < complexnum1.size(); ++i) 
    { 
     std::string str2 = ""; 
     std::vector<char> char1(complexnum1[i].begin(), complexnum1[i].end()); 
     for(unsigned int r = 0; r < char1.size(); ++r) 
     { 
      if(char1[r] >= '0' && char1[r] <= '9' || char1[r] == '-' || char1[r] == '.' || char1[r] == 'i') 
      { 
       str2 += char1[r]; 
       if(char1[r] == 'i') 
       { 
        str2=""; 
        break; 
       } 
      } 
     } 
     real1.push_back(str2); 
    } 
    return(real1); 
}; 

void Comp_Num::display (std::vector <string> display1) 
{ 
    unsigned int i = 0; 
    while (i < display1.size()) 
    { 
     std::cout<<display1[i]<<" "; 
     i++; 
    } 
    std::cout<<std::endl; 
}; 

void Comp_Num::display2 (std::vector <double> display3) 
{ 
    unsigned int i = 0; 
    while (i < display3.size()) 
    { 
     std::cout<<display3[i]<<" "; 
     i++; 
    } 
    std::cout<<std::endl; 
}; 

std::vector <string> Comp_Num::comp2real(std::vector <string> c2r) 
{ 
    std::vector <string> real2; 
    for(unsigned int i = 0; i < c2r.size(); ++i) 
    { 
     std::string str2 = ""; 
     std::vector<char> char1(c2r[i].begin(), c2r[i].end()); 
     for(unsigned int r = 0; r < char1.size(); ++r) 
     { 
      if(char1[r] >= '0' && char1[r] <= '9' || char1[r] == '-' || char1[r] == '.') 
      { 
       str2 += char1[r]; 
      } 
     } 
     real2.push_back(str2); 
    } 
    return(real2); 
} 

std::vector<double> Comp_Num::real2double (std::vector<string> r2d) 
{ 
    double y; 
    std::vector<double> final_r2d; 
    std::string str, str2; 
    std::vector<string>str3; 
    for(unsigned int i = 0; i < r2d.size(); ++i) 
    { 
     std::vector<char> ch(r2d[i].begin(), r2d[i].end()); 
     for(unsigned int r = 0; r < ch.size(); ++r) 
     { 
      if(ch[r] >= '0' && ch[r] <= '9' || ch[r] == '-' || ch[r] == '.') 
      { 
       str2 += ch[r]; 
      } 
     } 
     str3.push_back(str2); 
     str2=""; 
    } 
    for(unsigned int r = 0; r < str3.size(); r++) 
    { 
     str = str3[r]; 
     std::istringstream to_double(str); 
     while(to_double >> y) 
     { 
      final_r2d.push_back(y); 
     } 
    } 
    return(final_r2d); 
}; 

double Comp_Num::double_const(std::vector<double>dc) 
{ 
    r1_final=dc[0]; 
    r2_final=dc[1]; 
    return(0); 
}; 

void Comp_Num::operation() 
{ 
    std::string operate; 
    std::cout<<"What operation would you like perform on the numbers?\n"; 
    std::cout<<"You may choose between addition, subtraction, and multiplication.\n"; 
    std::getline(cin,operate); 
    if(operate == "addition") 
     Comp_Num operator+ (Comp_Num &c1, Comp_Num &c2); 
    else if (operate == "subtraction") 
     Comp_Num operator- (Comp_Num &c1, Comp_Num &c2); 
    else if (operate == "multiplication") 
     Comp_Num operator* (Comp_Num &c1, Comp_Num &c2); 
    else 
    { 
     cout<<"This is not a valid entry. Please start over."<<std::endl; 
     std::exit(0); 
    } 
}; 

Comp_Num operator +(const Comp_Num &c3, const Comp_Num &c4) 
{ 
    std::string output,imaginary = "i"; 
    double final_real = c3.real_in + c4.real_in; 
    std::cout<<"The difference of your imaginary numbers is "<<final_real<<imaginary<<std::endl; 
    return(c3); 
}; 

Comp_Num operator -(const Comp_Num &c3, const Comp_Num &c4) 
{ 
    std::string output,imaginary = "i"; 
    double final_real = c3.real_in - c4.real_in; 
    std::cout<<"The difference of your imaginary numbers is "<<final_real<<imaginary<<std::endl; 
    return(c3); 
}; 

Comp_Num operator *(const Comp_Num &c3, const Comp_Num &c4) 
{ 
    std::string output,imaginary = "i"; 
    double final_real = c3.real_in * c4.real_in; 
    final_real *= -1; 
    std::cout<<"The difference of your imaginary numbers is "<<final_real<<std::endl; 
    return(c3); 
}; 

回答

0

當您調用這些方法時,您將返回一個Comp_Num對象。因此,在主,他們應該被稱爲像:

Comp_Num cm 
    if(operate == "addition") 
    cm = c1 + c2; 
    else if (operate == "subtraction") 
    cm = c1 - c2; 
    else if (operate == "multiplication") 
    cm = c1 * c2; 
0

這些線的問題:

if(operate == "addition") 
    Comp_Num operator+ (Comp_Num &c1, Comp_Num &c2); 
else if (operate == "subtraction") 
    Comp_Num operator- (Comp_Num &c1, Comp_Num &c2); 
else if (operate == "multiplication") 
    Comp_Num operator* (Comp_Num &c1, Comp_Num &c2); 

如果你想用你的運營商,只是把它們作爲運營商

Comp_num c1, c2, c3; // get these from somewhere. 
if(operate == "addition") 
    c3 = c1 + c2; 
else if (operate == "subtraction") 
    c3 = c1 - c2; 
else if (operate == "multiplication") 
    c3 = c1 * c2; 

另一個錯誤是因爲你需要在類之外定義靜態變量。您現在也可以初始化它們。在你的班級定義下嘗試類似下面的內容:

double Comp_Num::r1_final = 0;