2016-08-15 131 views
2

我對C++真的很陌生,我對C++中的指針,地址和函數調用有點困惑。C++指針,引用和函數調用

我有以下函數調用:

config.pages= avail_pages(config.books_path, &config.books.front()); 

的配置類具有多個std::vectors<uint16_t>,例如config.books保存書籍ID(這是書籍路徑中的文件名稱)。

現在我想獲得第一本書的可用頁面(每頁是一個文件)。因此,avail_pages應查找books_path中的文件和第一本書中的文件。

的有效路徑可以預訂1234和12頁看起來像這樣:books_path/1234/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; 
} 

的問題是:如果我使用矢量函數前()返回到所述第一元件的參考。

  1. 我這樣稱呼:&config.books.front()

  2. 如何將引用傳遞給函數?我必須使用像這樣的指針:std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book)

  3. 如何訪問實際值並將其從整數轉換爲 字符串?

目前,我在front()函數的函數調用中得到一個錯誤,它顯示我沒有理解參考/指針的東西。 在此先感謝!

+0

它總是一些容器的一部分?我的意思是你想參考的價值。 –

+1

爲什麼你將'book'參數作爲指針傳遞?另外,不是按值傳遞'books_path'(意味着它被複制*),而是將其作爲常量引用(即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);