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

C++:如何访问另一个类中的类函数?,c++,class,vector,C++,Class,Vector,我正在学习如何使用std::vector,并希望访问它的值和函数。在另一个叫做光谱的物体里有一个向量物体。现在,当我尝试使用.capacity来确定向量的容量时,如果我只声明向量,它会很好地工作。但是,当我在另一个对象中声明向量时,会出现语法错误 错误: test.c++:36: error: base operand of ‘->’ has non-pointer type ‘Spectrum’ 正如下面已经提到的,->应该是一个点 我想要的是确定容器的容量,即使它现在编译,它也会给出

我正在学习如何使用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;
}

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

线向量bandmax\u oct;不会做你认为它会做的事

它在频谱构造函数的范围内定义了一个名为band的自动变量。它不涉及成员变量(也称为band):事实上,它将其隐藏,以便以后在构造函数中对band的任何引用都会引用自动变量,而不是您可以使用此->band访问的成员变量

你想要的是:

Spectrum(int max_oct = 3) : oct(max_oct), band(max_oct) {
}
或者不太好,因为它构造一个空向量,然后调整它的大小,而不是首先构造正确的大小:

Spectrum(int max_oct = 3) {
    oct = max_oct;
    band.resize(max_oct);
}
顺便说一句,我想你可能混淆了向量的大小和容量,虽然你说的不确定。vector的单参数构造函数创建具有指定大小的向量。因此,如果您还没有,您应该期望容量为8或更多,而不是8


[编辑:在回答下一个问题时,您总共需要初始化lpow:float lpow=0;]

您需要强制转换的具体目的是什么?没有必要。事实上,我指的是尺寸而不是容量。谢谢你的回答。