2016-08-15 18 views
2

私は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質問です:私は)ベクトル関数の前を(使用している場合、それは最初の要素への参照を返します。 。

  1. 私はこれを次のように呼びますか:&config.books.front()

  2. 関数への参照はどのように渡しますか?私はこのようなポインタを使用する必要がありますか:std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book)

  3. 実際の値にアクセスして、それを整数からキャストして 文字列にするにはどうすればよいですか?現時点で

は、私が参照/ポインタの事を理解didntのことを示す正面()関数の関数呼び出しでエラーを取得しています。 ありがとうございます!

+0

それは常にいくつかの容器の一部ですか?私はあなたが参照したい値を意味します。 –

+1

なぜ 'book'引数をポインタとして渡していますか?また、 'books_path'を値で渡す代わりに(これは* copied *を意味します)、それを定数参照(つまり' const std :: string&books_path')として渡します。 –

+0

@JoachimPileborgは絶えず参考にしてくれてありがとう! – cruxi

答えて

1

設定や書籍の定義を提供した方が良いでしょう。 これは、ベクトル関数front()がベクトルによって保持されている前面オブジェクトへの参照を返すよりも理解する必要があると言われています。 これを考慮する:

class book 
{ 
public : 
std::string books_path; 
uint16_t book_id; 
}; 
std::vector <book> config; 
//your declared function : 
std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book); 
//you'd call this as such : 
avail_pages(config.front().books_path, &config.front().book_id); 
関連する問題