2017-11-27 12 views
0

C++で記述して以来、しばらく経っています。私のプログラムの始まりが始まりました。C++小さなエラー: "...は、クラスの静的データメンバーではありません"

私は "branchsim.hpp" と呼ばれるファイルに次のようにあります

#ifndef _BRANCHSIM_HPP 
#define _BRANCHSIM_HPP 

// some #include statements here 

using std::cin; 
using std::cout; 
// ... some more using statements here 

class BranchSim { 
public: 
    int readMode(&string mode); 
}; 


#endif 

と私はbranchsim.cppというファイルでこれを持っている:

#include "./branchsim.hpp" 

int main(void) { 
    string mode; 

    return EXIT_SUCCESS; 
} 

/* 
* Returns an int representing the branch prediction heuristic to be 
used. 
*/ 
int BranchSim::readMode(&string mode) { 
    switch (tolower(mode)) { 
     case "at":   // always taken 
      return 1; 
     case "nt":   // never taken 
      return 2; 
     case "btfn":  // bkwd taken, fwd not taken 
      return 3; 
     case "bimodal":  // bimodal 
      return 4; 
     case "twolevel": // dynamic two level 
      return 5; 
     default: 
      cout << "Invalid prediction mode entered.\n"; 
    } 

    return 0; 
} 

と私は取得しています次のエラーが発生しました:

./branchsim.cpp:35:24: error: ‘int BranchSim::readMode’ is not a 
static data member of ‘class BranchSim’ 
int BranchSim::readMode(&string mode) { 
        ^
./branchsim.cpp:35:33: error: expected primary-expression before 
‘mode’ 
int BranchSim::readMode(&string mode) { 
          ^
./branchsim.cpp:35:39: error: expected ‘,’ or ‘;’ before ‘{’ token 
int BranchSim::readMode(&string mode) { 
           ^
Makefile:16: recipe for target 'branchsim.o' failed 
make: *** [branchsim.o] Error 1 

私はちょうどこれをコンパイルするようにしていますので、私は残りのプログラムを書くことができます。しかし、立ち往生しています。

私の構文は正しいと思います。これらのエラーを修正する方法は少し分かりません。私が言ったように、私のC++は少し錆びているので、これは私が行方不明/忘れていることは非常に明白かもしれませんが、どんな助けも大いに評価されるでしょう!

EDIT:私は単に&を紛失したい(前の文字列ではなく、後に所属)と私はすぐに、文字列のスイッチを許可していませんC++を実現し、私はそれに応じて調整しました。

些細なご質問にお詫び申し上げますが、早急にお手数ですが!

+1

まず、あなたは '&string'構文で何を言おうとしていましたか?第二に、あなたの最初のエラーメッセージが引用されていると信じるのは難しいです。ヘッダーファイルの '&string'に以前のエラーがあったはずです。 – AnT

+0

それはエラーでした。単純に '&'の後に '文字列'を入れることを意味していました。また、私はC + +を文字列でこれを許可していない忘れても、スイッチを変更する必要があったが、すべて今よくなっています。 –

答えて

1

「アドレスの文字列」のように、&string modeではなく、「文字列への参照」のようにおそらくstring& modeを意味します。典型的なC++コードは、次のような形をしています。

int BranchSim::readMode(const string& mode); 

実装は同じ仕様に従います。

+1

ああ、それは私のことはかなり愚かだった。ありがとうございます - 私は修正するいくつかの他のエラーがありますが、私は根本的に何かをやっていたことを心配していました。助けを感謝します! –

+0

問題ありません。 '&string'は有効な構文ですが、そのようなシグネチャには含まれていないと思われます。そういうわけではありません。あなたがC++を学ぶことに専念しているならば、[C++の作成者であるBjarneの本](http://www.stroustrup.com/4th.html)は、これ以上のことをするにつれてかなり読まれる必要があります。 – tadman

関連する問題