【问题标题】:C++ Error: Not declared in scope; Member functionC++ 错误:未在范围内声明;成员函数
【发布时间】:2016-07-14 14:38:30
【问题描述】:

我有一个错误,“结果向量”未在此范围内声明。我不确定在哪里或如何申报?结果向量的目的是显示将向量的X和每个向量的Y相加的结果,然后返回result_vector

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

class vector{
private:
    double x;
    double y;
public:
    //Constructor - default
    vector() : x(0), y(0) {}
    //Constructor - Custom
    vector(double xx, double yy) : x(xx), y(yy) {}
    //Get X & Y Coordinates
    double get_x() { return x;
    }
    double get_y() { return y;
    }
    //Set X & Y Coordinates
    void set_x( double xx) { x = xx;
    }
    void set_y( double yy) { y = yy;
    }
    //Adding Vectors
    vector add_vector( vector v1, vector v2){ 
        result_vector.x = v1.x + v2.x;
        result_vector.y = v1.y + v2.y;
        return result_vector; 
    }
    //Subtracting Vectorsed
    vector subtract_vector( vector v1, vector v2){
        result_vector.x = v1.x - v2.x;
        result_vector.y = v1.y - v2.y;
        return result_vector;
    }
};

int main() {
    //Default
    vector test;
    cout <<"Default \n" test.get_x().get_y() << "\n";
    //Customer
    vector test2(10, 12);
    cout <<"Custom \n" test2.get_x().get_y() << "\n";
    //Adding
    vector add = vector.add_vector(vector test1&, vector test2&);
    cout <<"Adding \n" add.get_x().get_y() <<"\n";
    //Subtracting
    vector sub = vector.subtract_vector(vector test1&, vector test2&);
    cout <<"Subtracting \n" sub.get_x().get_y() <<"\n";

    return 0;


}

【问题讨论】:

    标签: c++ c++11 scope compiler-errors


    【解决方案1】:

    错误是不言自明的。

    • 您需要在首次使用前声明 result_vector。
    • 您不能将类名与对象名一起作为参数传递。
    • 假设这条语句 cout &lt;&lt;"Default \n" test.get_x().get_y() &lt;&lt; "\n"; 应该打印向量的 x 和 y 值,您将不得不分别调用 get_x()get_y()
    • 正如 Andreas DM 所说,您不能使用 using namespace std;,因为在进行更正后它与现有类 vector.vector 类冲突

      #include <iostream>
      #include <vector>
      
      class vector{
      private:
          double x;
          double y;
      public:
          //Constructor - default
          vector() : x(0), y(0) {}
          //Constructor - Custom
          vector(double xx, double yy) : x(xx), y(yy) {}
          //Get X & Y Coordinates
          double get_x() { return x;
          }
          double get_y() { return y;
          }
          //Set X & Y Coordinates
          void set_x( double xx) { x = xx;
          }
          void set_y( double yy) { y = yy;
          }
          //Adding Vectors
          vector add_vector( vector v2){ 
              vector result_vector;
              result_vector.x = x + v2.x;
              result_vector.y = y + v2.y;
              return result_vector; 
          }
          //Subtracting Vectorsed
          vector subtract_vector( vector v2){
              vector result_vector;
              result_vector.x = x - v2.x;
              result_vector.y = y - v2.y;
              return result_vector;
          }
      };
      
      int main() {
          //Default
          vector test;
          std::cout <<"Default \n" <<test.get_x()<<test.get_y() << "\n";
          //Customer
          vector test2(10, 12);
          std::cout <<"Custom \n" <<test2.get_x()<<test2.get_y() << "\n";
          //Adding
          vector add;
          add = test.add_vector(test2);
          std::cout <<"Adding \n" <<add.get_x()<<add.get_y() <<"\n";
          //Subtracting
          vector sub ;
          sub = test.subtract_vector(test2);
         std::cout <<"Subtracting \n"<< sub.get_x()<<sub.get_y() <<"\n";
      
          return 0;
      
      
      }
      

    【讨论】:

      【解决方案2】:

      你还没有声明 result_vector 它不存在,因此错误。

      另外,您是 using namespace std;,并且您已将课程命名为 vector
      因此对vector 的引用是模棱两可的。

      您的代码还有其他几个错误,我建议您使用调试器并检查错误

      【讨论】:

        【解决方案3】:

        在使用变量之前,您必须声明它,以便编译器知道它退出了。在 C++ 中这是必需的(某些语言,如 Python,不需要它),因此在使用之前先声明 result_vector (vector result_vector;)

        【讨论】:

        • 一旦他解决了这个问题,他的下一个问题是向量的 x 和 y 是私有的,他正试图直接访问它们。
        • @mock_blatt 没关系,因为类可以访问它们,即使它是另一个变量(因为它是相同的类型)。
        • 是的,你是对的。他的下一个问题将是多个函数调用的错误使用,对吧? (我错误地称该运算符链接)
        • 谢谢。那么我会为 result_vector 的类型声明什么,它是否是双精度的,就像我输入 result_vector 一样?编译器正在寻找一种类型? @Blitz Rakete
        • 谢谢!我从上面的代码中看到。所以我需要在加/减函数下嵌入result_vector。这是有道理的,但没有意识到我可以。我想我需要在添加/减去向量上方有一个单独的行,例如vector result_vector; //Adding Vectors vector add_vector( vector v2){ result_vector.x = x + v2.x; result_vector.y = y + v2.y; return result_vector; }@Blitz Rakete
        猜你喜欢
        • 1970-01-01
        • 2011-09-14
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        相关资源
        最近更新 更多