C ++:如何访问另一个类中的类函数?

Posted

技术标签:

【中文标题】C ++:如何访问另一个类中的类函数?【英文标题】:C++: How to access a class function inside another class? 【发布时间】:2010-02-21 15:18:16 【问题描述】:

我正在学习如何使用 std::vector 并希望访问它的值和函数。我在另一个名为光谱的对象中有一个矢量对象。现在,当我尝试使用 .capacity 确定向量的容量时,如果我只声明向量,它就可以正常工作。但是当我在另一个对象中声明向量时,会出现语法错误。

错误:

test.c++:36: error: base operand of ‘->’ has non-pointer type ‘Spectrum’

正如下面已经提到的,-> 应该是一个点。

我想要的是确定容器的容量,即使它现在编译它也会给出结果 0 而不是我期望的 8。

代码:

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

/*  spectrum    */
class Spectrum
    public:
        float oct;
        vector<float> band;

        float total()
            int k;
            float lpow;
            // logarithmic summation
            for(k = 0; k < oct; k++)
                lpow = lpow + pow(10, band[k]);
            
            return(10*log10(lpow));
        

        Spectrum(int max_oct = 3)
            oct = max_oct;
            cout << "max oct = " << max_oct << endl;
            vector<float> band(max_oct); //create vector/array with max_oct bands
            cout << (int)band.capacity() << endl;
        

;

int main()

    //does not work in a class
    Spectrum input(8);
    cout << (int)input->band.capacity() << endl;

    //does work outside of a class
    vector<float> band(8);
    cout << (int)band.capacity() << endl;

【问题讨论】:

你到底需要演员做什么?这是不必要的。 【参考方案1】:

vector&lt;float&gt; band(max_oct); 行并没有像你想象的那样做。

它在 Spectrum 构造函数的范围内定义了一个名为 band 的自动变量。它不会触及也称为 band 的成员变量:实际上它“隐藏”了它,因此以后在构造函数中对 band 的任何引用都指的是自动变量,而不是成员变量(您可以使用this-&gt;band)。

你想要的是:

Spectrum(int max_oct = 3) : oct(max_oct), band(max_oct) 

或者(不太好,因为它构造一个空向量然后调整它的大小,而不是一开始就构造它正确的大小):

Spectrum(int max_oct = 3) 
    oct = max_oct;
    band.resize(max_oct);

顺便说一句,我认为您可能会混淆向量的sizecapacity(虽然不确定您所说的)。 vector 的单参数构造函数创建一个具有指定大小的向量。因此,如果您还没有,您应该期望容量为 8 个或更多,而不是 8 个。

[编辑:在回答您的下一个问题时,您需要在total() 中初始化lpowfloat lpow = 0;]

【讨论】:

确实,我指的是大小而不是容量。谢谢你的回答。【参考方案2】:

它不起作用,因为即使输入不是指针(或具有-&gt; 方法的对象),您也试图在输入上使用-&gt;。只要使用input.band.capacity就可以了。

【讨论】:

以上是关于C ++:如何访问另一个类中的类函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中访问另一个类中的一个类的私有函数?

从 MainActivity 类中的另一个函数访问 WebView

如何通过 C++ 中指向该数组的指针访问另一个类中的数组?

如何访问用c#中的函数创建的对象

从 C++ 中的类访问私有变量

如何在另一个类的函数中访问一个类的变量?