【问题标题】:static_cast fail to cast the address of vectorstatic_cast 无法转换向量的地址
【发布时间】:2016-03-03 18:47:35
【问题描述】:
vector<vector<int>> v;
vector<int> v0;
for(int i = 0; i < 5; i++){
    v.push_back(v0);
}
for(int i = 0; i < v.size(); i++){
    cout << static_cast<void const *>(&(v[i])) << endl;
}

我尝试将向量视为一个对象并像上面一样计算其地址但失败了,那么我该如何计算向量的地址。

【问题讨论】:

  • 链接器错误信息似乎与你的问题标题没有任何关系。
  • @j_random_hacker 嗯,有an overload 见(7),它应该匹配静态演员表。
  • @πάνταῥεῖ:完全正确!感谢您指出这一点,我将删除我的评论。
  • 你是对的,错误信息有误导性,我修改了我的问题。

标签: c++ gcc stl


【解决方案1】:

您可能想尝试使用

编译您的代码,而不是使用 gcc
g++ -std=c++14 

那么它应该可以工作:https://ideone.com/y0DwdA

我可以使用 gcc 重现的链接器错误很可能与 here 描述的编译器之间的差异有关。


正如@πάνταῥεῖ所指出的,编译器标志-std=c++11 也可以工作。

【讨论】:

  • 我在这里看不到 -std=c++14 的任何相关性?
  • -std==c++11 或者没有特定的标志可以解决这个问题,除非使用旧的cx03 编译器。
  • @πάνταῥεῖ 我同意 -std=c++11 就足够了,但没有编译器标志不起作用,至少一般情况下是这样。我使用的是 g++ 版本 5.2.1,>> 是没有提到的标志的语法错误。
【解决方案2】:

g++ -std=c++11 -Wall main.cc代码编译:

#include <iostream>
#include <vector>

int
main()
{
    using namespace std;

    vector<vector<int>> v;
    vector<int> v0;
    for(int i = 0; i < 5; i++){
        v.push_back(v0);
    }
    for(size_t i = 0; i < v.size(); i++){
        cout << reinterpret_cast<size_t>(&(v[i])) << endl;
    }
}

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    相关资源
    最近更新 更多