C++ performance: Linear regression in other way
Optimizing the algorithm
If \$M\$ is the number of steps between minimum and maximum, and \$N\$ is the size of the input and output vectors, then your algorithm has complexity \$\mathcal{O}(N \cdot M^3)\$. Also, it likely doesn't find the optimal solution unless you use a very small step size, and you have to choose minimum and maximum correctly. There are other algorithms that will both give you a guaranteed optimal solution without having to specify a range and a step size, and which have complexity \$\mathcal{O}(N)\$. This is possible since the problem of linear least squares can be solved analytically, and can be implemented efficiently on a computer.
If you don't want to go for the exact mathematical approach, and perhaps want to perform regressions of more complex functions that don't have an exact solution, then you might want to look into algorithms that approach the problem in a smarter way than just brute-forcing all possible values of the parameters. A typical solution to this kind of problem is to implement a gradient descent algorithm.
Choosing the right error function
The way you calculate the error (or rather the residual to be more precise) is quite strange. Normally one would try to minimize the sum of the squares of the difference between a data point and the predicted value. However, your error function is using the linear difference, and weighting it such that the first datapoint has the least weight, and the last datapoint weighs as much as all the other datapoints combined:
float error = Module(Predict(a, b, c, input[0]) - output[0]);
for (int i = 1; i &lt; input.size(); i++)
    error = (Module(Predict(a, b, c, input[i]) - output[i]) + error)/2;

Unless this is really the intended function, you should probably replace this with a function that calculates the least squares residual.