2016-08-15 86 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);