I\'ve been getting these two errors and I cant seem to find a solution that works.
LNK1120: 1 unresolved externals
Error 1 error LNK2019: unresolve
It says that the linker cannot find an implementation of Vector3D(const Vector3D& rhs);
. This constructor is declared in your vector class, but not defined.
Do you have an implementation of the constructor somewhere in a .cpp
file, and is this file known to your compiler?
C/C++ compilation works like that: At first, you have a number of so called "compilation units" - normally, every .cpp
-file is one such compilation unit. Your program consists of all these separate units linked together (the "linking" process, happens after compilation). Every function that is called somewhere has to be defined exactly once in some compilation unit, unless it is defined inline (like the other methods of your class). If a method is declared, but not defined, the compiler will not complain - only the linker will. Imagine the compilation units having "sockets" and "connectors" which fit to the corresponding "sockets" of other units. The compilation process just creates these units assuming a particular "socket" shape (as given by declarations), whereas the linker actually tries to connect each "socket" with it's "connector". So you see how the compilation process may suceed, but the linking not.
Linker errors can be tricky to solve, especially if you're not that experienced yet. There can be many causes for them:
And many more..
Edit: Apart from that, you should pass the vector by const reference, and create newVector by invoking it's constructor, instead of creating a default constructed object and then assigning. And the final construction in the return statement
is not needed as well. Improved code:
Vector3D Matrix4::operator *(const Vector3D& vector)
{
return Vector3D(
(m[0][0] * vector.GetVector_X()) + (m[0][1] * vector.GetVector_Y()) + (m[0][2] * vector.GetVector_Z()) + m[0][3],
(m[0][0] * vector.GetVector_X()) + (m[1][1] * vector.GetVector_Y()) + (m[1][2] * vector.GetVector_Z()) + m[1][3],
(m[0][0] * vector.GetVector_X()) + (m[2][1] * vector.GetVector_Y()) + (m[2][2] * vector.GetVector_Z()) + m[2][3]
);
}