【问题标题】:C++ Undefined Symbol ErrorC++ 未定义符号错误
【发布时间】:2014-06-01 04:59:16
【问题描述】:

我收到所有整数和字符值的未定义符号错误。请帮助我。 int x yz 不起作用,函数的 char 值也不起作用。

#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <string.h>

class Calculator
{
    public:
    int x;
    int y;
    int z;
    char function;

    void Calculate()
    {
      if(function=='+')
      {z=x+y;}
      else if(function=='-')
      {z=x-y;}
      else if(function=='*')
      {z=x*y;}
      else if(function=='/')
      {z=x/y;}
      else
      {cout<<"Wrong Function!!!";}
    }
};

void main()
{
    clrscr();
    Calculator  working;
    cout<<"Welcome!"<<endl;
    cout<<"Enter your first number:"<<endl;
    cin>>x;
    cout<<"Enter your function:"<<endl;
    cin>>function;
    cout<<"Enter your second number:"<<endl;
    cin>>y;
    working.Calculate();
    cout<<"Your Result is:"<<z<<endl;
    getch();
}

【问题讨论】:

  • 请发布准确的错误信息。另外,是int main,不是void main,还有&lt;iostream&gt;,不是&lt;iostream.h&gt;
  • 您是否有可能错过了使用namespace std;?还是有很多std:: 限定词?
  • 您确定错误消息是关于xyz 的吗?当我尝试编译它时,我收到关于 cincout 的错误。
  • 错误信息可能只是关于使用未初始化变量的警告。

标签: c++ undefined symbols


【解决方案1】:

您需要将值传递给函数Calculate。变量 x、y、z 和函数在类之外是不可访问的,而且你需要一个函数的返回类型,以便你可以从函数 Calculate 中获取输出。

class Calculator
{
public:
int x;
int y;
int z;
char function;

int Calculate(int main_x,int main_y,char main_function)
{
    x= main_x;
    y=main_y;
    function = main_function;
  if(function=='+')
  {z=x+y; return z;}
  else if(function=='-')
  {z=x-y; return z;}
  else if(function=='*')
  {z=x*y; return z;}
  else if(function=='/')
  {z=x/y; return z;}
  else
  {cout<<"Wrong Function!!!"; return 0;}
}
 };

void main()
 {
     clrscr();
   int main_x,main_y,main_z;
    char main_function;

Calculator  working;
cout<<"Welcome!"<<endl;
cout<<"Enter your first number:"<<endl;
cin>>main_x;
cout<<"Enter your function:"<<endl;
cin>>main_function;
cout<<"Enter your second number:"<<endl;
cin>>main_y;
main_z = working.Calculate(main_x,main_y,main_function);
cout<<"Your Result is:"<<main_z<<endl;
getch();
}

【讨论】:

    【解决方案2】:

    这是您代码的成功编译版本。

    #include <iostream>
    #include <cmath>
    #include <cstring>
    using namespace std;
    
    class Calculator
    {
    public:
      int x;
      int y;
      int z;
      char function;
    
      void Calculate()
      {
        if(function=='+')
          {z=x+y;}
        else if(function=='-')
          {z=x-y;}
        else if(function=='*')
          {z=x*y;}
        else if(function=='/')
          {z=x/y;}
        else
          {cout<<"Wrong Function!!!"<<endl;}
      }
    };
    
    int main()
    {
    
      Calculator  working;
      cout<<"Welcome!"<<endl;
      cout<<"Enter your first number:"<<endl;
      cin>>working.x;
      cout<<"Enter your function:"<<endl;
      cin>>working.function;
      cout<<"Enter your second number:"<<endl;
      cin>>working.y;
      working.Calculate();
      cout<<"Your Result is:"<<working.z<<endl;
      return 0;
    }
    

    【讨论】:

      【解决方案3】:

      错误即将到来,因为您试图在未声明 x、y、z 的 main() 中从外部访问类成员变量 x、y、z。

      为了让 calculate() 正常工作,x、y、z 应该得到正确的值,在你的情况下,这些变量具有垃圾值。

      【讨论】:

        【解决方案4】:

        这段代码编译:

        #include <iostream>
        #include <math.h>
        #include <string.h>
        
        using namespace std;
        
        class Calculator
        {
        public:
        int x,y;
        float z;
        void add()
        {
        cin>>x;
        cin>>y;
        z=x+y;
        cout<<"The addition is:"<<z<<endl;
        }
        void substract()
        {
        cin>>x;
        cin>>y;
        z=x-y;
        cout<<"The substraction is:"<<z<<endl;
        }
        void multiply()
        {
        cin>>x;
        cin>>y;
        z=x*y;
        cout<<"The multiplication is:"<<z<<endl;
        }
        void divide()
        {
        cin>>x;
        cin>>y;
        z=x/y;
        cout<<"The division is:"<<z<<endl;
        }
        
        };
        
        int main()
        {
        cout<<"Hello User!"<<endl;
        char Name[23];
        cout<<"Enter your name:";
        cin>>Name;
        cout<<"Hy "<<Name<<endl;
        
        cout<<"Calculator:"<<endl;
        Calculator maths;
        
        cout<<"Enter two numbers to Add:"<<endl;
        maths.add();
        cout<<"Enter two numbers to Substract:"<<endl;
        maths.substract();
        cout<<"Enter two numbers to Multiply:"<<endl;
        maths.multiply();
        cout<<"Enter two numbers to Divide:"<<endl;
        maths.divide();
        }
        

        每当您使用 cincoutendl 时,都会缺少 std:: 限定符。使用std::coutstd::cinstd::endl 或在文件开头包含using namespace std;

        【讨论】:

          【解决方案5】:

          要么使用std::cinstd::coutstd::endl,要么包括std命名空间,

          using namespace std;
          

          【讨论】:

          • @Barmar 我试图编译代码,它没有给出 x,y,z 的错误
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-17
          • 2014-05-14
          • 1970-01-01
          • 2012-10-10
          • 2013-10-22
          相关资源
          最近更新 更多