0

編集:このバージョンのコードではaListがポインターとして参照されていましたが、同じ問題が発生している現在のバージョンでは参照されていませんでした。

このコードをインターフェイスファイルと実装ファイルに分割する前に、このコードを完全に機能させました。しかし、それを分割すると、コンパイラーは、誤ったパラメーターを使用してpush_back()を呼び出していると通知します。ですから、同じですが、プッシュしているオブジェクトのタイプを参照できないことを理解しています(もちろん:D)。

#ifndef _MYHEADER_HPP_
#define _MYHEADER_HPP_
class A{
public:
    std::string someString;
};

class B{
public:
    std::vector<A> aList;
public:
    void addA();
};

#endif /* _MYHEADER_HPP_ */

//implementation file

#include <string>
#include <vector>
#include "myheader.hpp"

void B::addA(){
    A a;
    a.someString = "Hola";
    // Here compiler says : Invalid arguments 'Candidates are: void push_back(const A &)' line 18 Semantic Error
    aList.push_back(a);
}

AFAIK、std :: vectorは常にプッシュするオブジェクトのコピーを実行し、そのコピーはベクターに格納されるので、「a」がスタックに割り当てられる問題ではないと思いますよね?

私が間違っているのは何ですか?ありがとう。

4

1 に答える 1

5

問題の原因を3時間以上探したところ、EclipseCDTIDEのコードに関するキャッシュファイルが破損していることがわかりました。したがって、コマンドラインからのコンパイルはすべて問題なく、そのキャッシュファイルを削除する必要があり、Eclipseはエラーを報告しませんでした。

于 2012-05-26T22:57:59.447 に答える