简体   繁体   English

如何从函数返回向量

[英]How to return a vector from a function

I'm trying to return a vector from a function, but I seem to be having some issues .... 我正在尝试从一个函数返回一个向量,但是我似乎遇到了一些问题....

Currently, this is the best I've got: 目前,这是我所拥有的最好的:

int* OptimizedSkillLevels(int skillLevel, const int numSkills, int duration, FragmentOptimizationParameters FOP){

        //some code to work with some things was here

        vector<int> skills(numSkills);

        int skillIncrement = 0;
        while (skillLevel > FOP.levelDifference){
        skills[skillIncrement%numSkills] += FOP.levelDifference;
        skillLevel-= FOP.levelDifference;
        skillIncrement++;
        }
        skills[skills.size()-1] += skillLevel;

        //at this point, the vector skills is full of the correct values, which is what really matters.
    }

    int* skillsArr = &skills[0];
    return skillsArr;
}

Though this seems to be giving me garbage values when I access it from this function call: 虽然当我从此函数调用访问它时似乎给了我垃圾值:

cout << OptimizedSkillLevels(skillLevels[i], userMaxNumSkills, durations[i], FOPs[FOPindex])[j] << ", ";

specifically, I'm getting -17891602 from that every time, regardless of what [j] is. 具体来说,无论[j]是什么,我每次都会得到-17891602

So then I tried to convert to a vector as follows: 因此,我尝试转换为矢量,如下所示:

vector<int> OptimizedSkillLevels(int skillLevel, const int numSkills, int duration, FragmentOptimizationParameters FOP){

        //some code to work with some things was here

        vector<int> skills(numSkills);

        int skillIncrement = 0;
        while (skillLevel > FOP.levelDifference){
        skills[skillIncrement%numSkills] += FOP.levelDifference;
        skillLevel-= FOP.levelDifference;
        skillIncrement++;
        }
        skills[skills.size()-1] += skillLevel;

        //at this point, the vector skills is full of the correct values, which is what really matters.
    }

    return skills;
}

with the function prototype: 与函数原型:

vector<int> OptimizedSkillLevels(int skillLevel, int numSkills, int duration, FragmentOptimizationParameters FOP);

But I'm getting a multitude of errors, including this (at the line of the prototype): 但是我遇到了很多错误,包括以下错误(在原型行中):

1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59): error C2143: syntax error : missing ';' before '<'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

and these, none of which appeared before changing the return type of my function to vector ... so I really don't know what going on. 而且这些,在将函数的返回类型更改为vector之前都没有出现……所以我真的不知道发生了什么。

    1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59): error C2143: syntax error : missing ';' before '<'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(73): error C2872: 'vector' : ambiguous symbol
1>          could be 'c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : int vector'
1>          or       'c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector(655) : std::vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(73): error C2143: syntax error : missing ';' before '<'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(73): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(73): error C2086: 'int vector' : redefinition
1>          c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : see declaration of 'vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(74): error C2872: 'vector' : ambiguous symbol
1>          could be 'c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : int vector'
1>          or       'c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector(655) : std::vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(74): error C2143: syntax error : missing ';' before '<'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(74): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(74): error C2086: 'int vector' : redefinition
1>          c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : see declaration of 'vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(84): error C2065: 'FOPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(84): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(85): error C2065: 'FOPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(85): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(86): error C2065: 'FOPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(86): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(87): error C2065: 'FOPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(87): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(88): error C2065: 'FOPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(88): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(89): error C2065: 'FOPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(89): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(91): error C2065: 'FCPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(91): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(92): error C2065: 'FCPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(92): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(93): error C2065: 'FCPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(93): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(94): error C2065: 'FCPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(94): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(95): error C2065: 'FCPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(95): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(96): error C2065: 'FCPs' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(96): error C2228: left of '.push_back' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(169): warning C4244: 'return' : conversion from 'const double' to '__int64', possible loss of data
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(192): warning C4244: 'argument' : conversion from 'double' to '__int64', possible loss of data
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(195): warning C4244: '=' : conversion from 'double' to 'int', possible loss of data
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(196): warning C4244: '=' : conversion from 'double' to 'int', possible loss of data
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(197): warning C4244: 'argument' : conversion from 'double' to '__int64', possible loss of data
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(202): warning C4244: '+=' : conversion from 'double' to 'int', possible loss of data
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(203): warning C4244: '+=' : conversion from 'double' to 'int', possible loss of data
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(215): error C2872: 'vector' : ambiguous symbol
1>          could be 'c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : int vector'
1>          or       'c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector(655) : std::vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(215): error C2062: type '__int64' unexpected
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(216): error C2872: 'vector' : ambiguous symbol
1>          could be 'c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : int vector'
1>          or       'c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector(655) : std::vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(216): error C2062: type '__int64' unexpected
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(217): error C2872: 'vector' : ambiguous symbol
1>          could be 'c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : int vector'
1>          or       'c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector(655) : std::vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(217): error C2062: type '__int64' unexpected
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(229): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(229): error C2228: left of '.size' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(231): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(231): error C2228: left of '.resize' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(232): error C2065: 'skillLevels' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(232): error C2228: left of '.resize' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(233): error C2065: 'durations' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(233): error C2228: left of '.resize' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(236): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(239): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(239): error C2228: left of '.size' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(242): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(243): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(244): error C2065: 'skillLevels' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(245): error C2065: 'durations' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(251): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(251): error C2228: left of '.size' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(252): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(252): error C2065: 'skillLevels' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(252): error C2065: 'durations' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(265): error C2872: 'vector' : ambiguous symbol
1>          could be 'c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : int vector'
1>          or       'c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector(655) : std::vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(265): error C2062: type 'int' unexpected
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(266): error C2872: 'vector' : ambiguous symbol
1>          could be 'c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(59) : int vector'
1>          or       'c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector(655) : std::vector'
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(266): error C2062: type 'int' unexpected
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(269): error C2065: 'optimalCosts' : undeclared identifier
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(269): error C2228: left of '.size' must have class/struct/union
1>          type is ''unknown-type''
1>c:\users\vasu\documents\visual studio 11\projects\composing calc\composing calc\composing calc.cpp(269): fatal error C1903: unable to recover from previous error(s); stopping compilation
1>

Any help anyone could offer on either the proper method of returning a vector or some sort of workaround would be much appreciated. 任何人都可以就返回向量的正确方法或某种解决方法提供的任何帮助将不胜感激。

Your first approach returns a pointer to an object that no longer exists. 您的第一种方法将返回一个指向不再存在的对象的指针。 That's obviously never going to work. 这显然永远都行不通。

Your second approach is correct. 您的第二种方法是正确的。 Just fix the syntax errors. 只需修复语法错误。 Do you have a #include <vector> ? 你有#include <vector>吗? Do you have a using namespace std; 你有一个using namespace std; ?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM