parameter passing for argument of type ‘std::vector<commonapi::nwDiag::qafNetDiagStatus>::const_iterator’ {aka ‘__gnu_cxx::__normal_iterator<const commonapi::nwDiag::qafNetDiagStatus*, std::vector<commonapi::nwDiag::qafNetDiagStatus> >’} changed in GCC 7.
时间: 2023-08-03 10:04:05 浏览: 331
这个问题是在使用 GCC 7 版本及以上编译器时,对于类型为 `std::vector<commonapi::nwDiag::qafNetDiagStatus>::const_iterator` 的参数进行参数传递时出现的问题。在 GCC 7 之前的版本中,这种类型的参数可以通过值或引用传递,但是在 GCC 7 中,只能通过引用传递。
这是由于在 C++11 中,`std::vector` 的迭代器被修改为随机访问迭代器,其实现方式与指针类似。而在 GCC 7 中,针对随机访问迭代器的传递方式进行了修改,只能通过引用传递,避免了不必要的拷贝开销。
如果你需要在 GCC 7 及以上版本中编译代码,并且需要传递这种类型的参数,可以将参数声明为引用类型,如下所示:
```cpp
void foo(std::vector<commonapi::nwDiag::qafNetDiagStatus>::const_iterator& it);
```
相关问题
no match for call to ‘(cv::Moments) (std::vector<cv::Point_<int> >&)’ 38 | Moments moments = moments(max_contour);
To solve this error, you need to make sure that you are passing the correct data type to the cv::Moments function. The error message suggests that you are passing a std::vector<cv::Point_<int>> data type, which is not compatible with the cv::Moments function.
One possible solution is to convert the std::vector<cv::Point_<int>> data type into a cv::Mat data type before passing it to the cv::Moments function. You can do this by using the cv::Mat constructor that takes a std::vector<cv::Point_<int>> as an argument.
Here's an example:
```
std::vector<cv::Point> contour; // assume this is your contour data
// convert the contour data into a cv::Mat data type
cv::Mat contourMat(contour);
// calculate the moments of the contour
cv::Moments moments = cv::moments(contourMat);
```
Note that the cv::Mat constructor that takes a std::vector<cv::Point_<int>> as an argument assumes that each element of the vector is a 2-dimensional point (i.e., has an x and y coordinate). If your data has more than 2 dimensions or if the data type of the coordinates is different, you may need to modify this code accordingly.
lines[newx][newy]="YES";C:\Program Files\CodeBlocks\yijvxingqiu\main.cpp|35|error: passing 'const value_type' {aka 'const std::__cxx11::basic_string<char>'} as 'this' argument discards qualifiers [-fpermissive]|
这个错误是由于你尝试修改一个常量对象引起的。根据错误消息,`lines[newx][newy]` 是一个常量对象,无法被修改。
要解决这个问题,你需要确保 `lines[newx][newy]` 是可修改的。一种方法是将 `lines` 声明为二维字符串数组,而不是常量数组。另一种方法是使用 `std::vector<std::vector<std::string>>` 来代替二维数组,并确保在修改元素之前,你正在修改的那个元素是可修改的。
以下是一个示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<std::string>> lines = {{"NO", "NO", "NO"}, {"NO", "NO", "NO"}};
int newx = 1;
int newy = 2;
if (newx >= 0 && newx < lines.size() && newy >= 0 && newy < lines[newx].size()) {
lines[newx][newy] = "YES";
}
// 输出修改后的结果
for (const auto& row : lines) {
for (const auto& element : row) {
std::cout << element << " ";
}
std::cout << std::endl;
}
return 0;
}
```
在上述示例中,我们使用了 `std::vector<std::vector<std::string>>` 来表示二维字符串数组 `lines`。我们首先声明了一个包含 `"NO"` 的二维数组,然后尝试将 `lines[newx][newy]` 修改为 `"YES"`。最后,我们输出修改后的结果。
请根据你的代码适配这个示例或提供更多相关代码,以便我可以更好地帮助你解决问题。
阅读全文