3

配列を直接渡すことはできますが、参照によって渡す方法を知る必要があります。Element 型の新しい std::array を使用しています。私はいくつかのことを試しましたが、うまくいきません。参照として渡す方法がわかりません。私はいじりました、そして私はこれを理解することができません。

配列全体をコピーしないようにするには、std::array を参照パラメーターとして渡すにはどうすればよいですか?

アレイのセットアップ方法:

std::array<Element, 115> Elements =
{{
    /*int aNumber, float awNumber, period_number PERIOD, group_names GROUP_NAME, metal_status METALSTATUS,
    valence_shell Orbital,std::string eName, std::string eSybol);*/
    {},
    {1,     1.00794,        period::PERIOD_ONE,     group::HYDROGEN,        metal::NONMETAL,    shell::S_ORBITAL,   "Hydrogen",     "H"}
}};

働く

void sortByAtomicNumber(std::array<Element, 115> elements, int minimum, int maximum)
{
    int counter = 1;
    for(;minimum < (maximum+1); minimum++)
    {
        std::cout << counter << ".) " << elements[minimum].getElementName() << std::endl;
        counter++;
    }
}

試した元: http://gauravpandey.com/wordpress/?p=602 //テンプレートをまだ学習していません...

 template<size_t N>
void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) {
    int counter = 1;
    for(;minimum < (maximum+1); minimum++)
    {
        std::cout << counter << ".) " << arr[minimum].getElementName() << std::endl;
        counter++;
    }
}

上からの誤差


エラー: 'std::string > > Element::getElementName()' の 'this' 引数として 'const value_type {aka const Element}' を渡すと、修飾子が破棄されます [-fpermissive]


4

3 に答える 3

2

これを試して:

void sortByAtomicNumber(std::array<Element, 115> &elements, int minimum, int maximum)
{
    int counter = 1;
    for(;minimum < (maximum+1); minimum++)
    {
        std::cout << counter << ".) " << elements[minimum].getElementName() << std::endl;
        counter++;
    }
}
于 2014-02-08T05:27:09.470 に答える
2

いくつかのエラーがあります:

  1. テンプレートsortByAtomicNumberでは、 でstd::array<int, N>ある必要がありますstd::array<Element, N>

  2. const オブジェクトの関数を呼び出したい場合、その関数は const でなければなりません。したがって、あなたarrは const 参照でvoid getElementName();あり、Elementクラスの は である必要がありますvoid getElementName() const;

  3. オブジェクトの非定数関数を呼び出したい場合、オブジェクトは非定数でなければなりません。@portforwardpodcastが言ったように、そうtemplate<size_t N> void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) { /* your code */ }あるべきです。template<size_t N> void sortByAtomicNumber(std::array<Element, N>& arr, int maximum, int minimum) { /* your code */ }

注: const クラスの const 関数については、この記事を参照してください。それがあなたを助けることを願っています。

于 2014-02-08T06:49:20.863 に答える