私は現在、C++ でクラスとヘッダー ファイルを書く練習をしています。質問があります。ヘッダー ファイルに、クライアントが使用できるパブリック関数があり、それぞれのクラスでそれを実装する方法を知っているとしましょう。ただし、この関数はいくつかのステップに分割されており、ユーザーに見られたくない独立した関数として記述できるとしましょう (知的財産を保護します)。通常、ヘッダー ファイルで定義されている関数ごとに、.cpp ファイルに myClassName::myFunctionName(parameter 1 ..) を記述します。.cpp ファイルでのみ関数を定義して使用する方法はありますか? たとえば、2 つの単語がアナグラム (文字が同じ) かどうかを調べるプログラムを作成しました。
私のヘッダーファイルは次のとおりです。
#ifndef _Anagrams_h
#define _Anagrams_h
#include <string>
using namespace std;
class Anagrams{
public:
Anagrams(string &s);
static bool areTwoWordsAnagrams(string s1, string s2) ;
string getWord()const;
void setWord(string &s);
private:
string word;
};
#endif
私のクラスは:
#include "Anagrams.h"
#include <string>
using namespace std;
Anagrams::Anagrams(string &s){
word = s;
}
bool Anagrams::areTwoWordsAnagrams(string word1, string word2){
int sizeOfWord1 = word1.size();
int sizeOfWord2 = word2.size();
int array1[26];
int array2[26];
for (int i = 0; i < 26; i++){ //Initialize both arrays
array1[i] = 0;
array2[i] = 0;
}
decomposeWordIntoLetters(word1,array1,sizeOfWord1);
decomposeWordIntoLetters(word2,array2,sizeOfWord2);
return true;
}
string Anagrams::getWord() const{
return word;
}
void Anagrams::setWord(string &s){
word = s;
}
void decomposeWordIntoLetters(string word, int array[], int size){
for (int i = 0; i < size; i++){
char letter = word[i];
array['z' - letter]++;
}
}
decomposeWordIntoLetters 関数がヘッダー ファイルで定義されていないことに注意してください。コードをコピーして Anagrams::areTwoAnagrams(string word1, string word2) に 2 回貼り付けると、プログラムは機能します。そうしないと、次のエラーが表示されます。
Anagrams.cpp: In static member function ‘static bool Anagrams::areTwoWordsAnagrams(std::string, std::string)’:
Anagrams.cpp:22: error: ‘decomposeWordIntoLetters’ was not declared in this scope
どんな助けでも大歓迎です。ありがとうございました。