taking address of temporary [-fpermissive]

Bug

今天在做leetcode两数之和时,想要完整地实现整个程序,于是写了头文件

//twoSum.h
#ifndef  TWO_SUM_H_
#define  TWO_SUM_H_

class Solution{
public:
    Solution();
    std::vector<int> twoSum(std::vector<int> &nums, int target);
    ~Solution();
};

和main文件

#include <iostream>
#include <vector>
#include <unordered_map>
#include "twoSum.h"

using namespace std;
vector<int> twoSum(vector<int>& nums, int target)
{
    unordered_map<int, int> hash;
    vector<int> vec;
    //如果这里的i不用unsigned int类型,gcc编译器会出一个warning
    for(unsigned int i=0;i!=nums.size();++i)
    {
        int temp = target - nums[i];
        if(hash.find(i)!=hash.end())
        {
            vec.push_back(i);
            vec.push_back(temp);
            break;
        }
        vec[i] = i;
    }
    return vec;
}

int main(){
    Solution s;
    vector<int> nums{2,7,11,15};
    int target = 9;

    vector<int>* p = &s.twoSum(nums, target);
    for(vector<int>::iterator iter=p->begin();iter!=p->end();++iter)
        cout<< *iter <<endl;

    return 0;
}

g++ -std=c++11 main.cpp -Wall

发现报错
main.cpp: In function ‘int main()’:

main.cpp:31:44: error: taking address of temporary [-fpermissive] vector<int> *p = &s.twoSum(nums, target);

原因

去StackOverflow看了一下
https://stackoverflow.com/questions/16481490/error-taking-address-of-temporary-fpermissive
原来是是C++不允许对一个临时变量进行取地址操作,为什么会产生一个临时变量呢?
原来,在类里面没有定义

全部评论

相关推荐

每晚夜里独自颤抖:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
找工作时遇到的神仙HR
点赞 评论 收藏
分享
机械打工仔:第一位颇有孟德之志
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务