Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在一个类中使用另一个类中的函数,而不在c++;_C++_Oop - Fatal编程技术网

C++ 在一个类中使用另一个类中的函数,而不在c++;

C++ 在一个类中使用另一个类中的函数,而不在c++;,c++,oop,C++,Oop,情况是这样的: //header file #ifndef CLASSA_H #define CLASSA_H #include <stdint.h> class ClassA { public: void function1(); void function2(); }; #endif //CLASSA_H 我想在main.cpp中调用function3(),但不需要继承。我尝试使用ClassA的实例,但上面说“function3不是ClassA的成员”

情况是这样的:

//header file

#ifndef CLASSA_H
#define CLASSA_H

#include <stdint.h>

class ClassA
{
public:
    void function1();

    void function2();
};

#endif //CLASSA_H
我想在main.cpp中调用function3(),但不需要继承。我尝试使用ClassA的实例,但上面说“function3不是ClassA的成员”。 也许我遗漏了一个概念,如果有人能提供帮助,那就太好了。

function3()没有在类a中声明。obj.fuction3()没有任何意义。如果要对类A的对象进行操作,可以在function3中进行更改,以便它能够从main接收对象作为参数。
P.S对象将通过引用发送。

当您尝试使用

obj.function3()
语法调用
function3()
时,编译器会尝试查找类(即对象)实例中是否存在名为
function3
的函数

现在,在这种情况下,您可以做两件事:

  • 在类的
    public:
    中包含
    void function3()
    ,并将
    void function3()
    更改为
    void ClassA::function3()
    ,告知编译器包含的代码是为类成员函数定义的

  • 或者,在头文件中定义函数,并通过定义类对象防止调用函数。很明显,您不能访问在类之外声明的内容


  • 以上两种方法的代码说明如下:

    方法1
    ClassA.cpp
    main.cpp
    ClassA.h

    方法2
    ClassA.h
    main.cpp
    ClassA.cpp


    但是第二种方法会使类变得无用,因此,您可能想实现第一种方法而不是第二种方法。

    obj.function3()调用类的成员函数。如果您只想调用函数,请执行
    function3()。答案取决于
    function3
    是否应该是一个类的一部分。您希望
    obj.function3()
    做什么,仅仅
    function3()
    不做什么?只做function3();它说“function3未在此范围内声明”
    function3()
    不是
    ClassA
    成员函数,不能这样调用它。@metal\u dent,您不需要在那里定义它,只需要声明
    void function3()
    //cpp file
    #include "ClassA.h"
    void ClassA::function1()
    {
        /* some code */
    }
    void ClassA::function2()
    {
        /* some more code */
    }
    void function3()
    {
        /* more code /*
    }
    
    //main.cpp
    #include "ClassA.h"
    int main()
    {
        ClassA obj;
        obj.function3();
    }
    
    #include "ClassA.h"
    ...
    void ClassA::function3() // definition of the class member function
    {
        /* more code */
    }
    
    #include "ClassA.h"
    int main()
    {
        ClassA obj;
        obj.function3(); // now it's inside the class member function
                         // hence, we may now use it
    }
    
    ...
    class ClassA
    {
    public:
        ...
        void function3(); // declared inside the class
    };
    
    #endif //CLASSA_H
    
    ...
    void function3()
    {
        /* more code */
    }
    
    #include "ClassA.h"
    int main()
    {
        function3();
    }
    
    class {
        ...
    };
    
    void function3()
    {
        /* more code */
    }