私はC++には本当に新しく、C++のポインタ、アドレス、関数呼び出しについて少し混乱しています。 C++のポインタ、参照、関数の呼び出し
I次の関数呼び出しを持っている:config.pages= avail_pages(config.books_path, &config.books.front());
Configクラスあり、複数のstd::vectors<uint16_t>
、例えばconfig.books
はbook ids(books_pathのファイル名)を保持します。
今、私は最初の本(すべてのページがファイルです)の利用可能なページを取得したいと思います。したがって、avail_pagesはbooks_pathと最初の本のファイルを探します。
有効なパスは、1234年予約すると12ページには、次のようになります。books_path// 12
std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book) {
std::vector<uint16_t> pages;
std::string first_book;
first_book = books_path + std::to_string(*book); //pointer or not? string concatenation?
boost::filesystem::path p(first_book);
for (auto i = boost::filesystem::directory_iterator(p); i != boost::filesystem::directory_iterator(); i++)
{
std::string s = i->path().filename().string();
pages.push_back(std::stoi(s));
}
return pages;
}
1234質問です:私は)ベクトル関数の前を(使用している場合、それは最初の要素への参照を返します。 。
私はこれを次のように呼びますか:
&config.books.front()
?関数への参照はどのように渡しますか?私はこのようなポインタを使用する必要がありますか:
std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book)
?- 実際の値にアクセスして、それを整数からキャストして 文字列にするにはどうすればよいですか?現時点で
は、私が参照/ポインタの事を理解didntのことを示す正面()関数の関数呼び出しでエラーを取得しています。 ありがとうございます!
それは常にいくつかの容器の一部ですか?私はあなたが参照したい値を意味します。 –
なぜ 'book'引数をポインタとして渡していますか?また、 'books_path'を値で渡す代わりに(これは* copied *を意味します)、それを定数参照(つまり' const std :: string&books_path')として渡します。 –
@JoachimPileborgは絶えず参考にしてくれてありがとう! – cruxi