Xin chào, tôi nhận được lỗi liên kết LNK2019: biểu tượng bên ngoài chưa được giải quyết khi cố gắng sử dụng toán tử + bị quá tải. Tôi sẽ chỉ cho bạn xem từ lớp học và cách tôi sử dụng nó trong chính. Nếu bạn cần xem thêm, hãy cho tôi biết, tôi sẽ cố gắng giữ cho mọi thứ ngắn gọn.Quá tải + Nhà điều hành Với Mẫu
/** vec.h **/
#ifndef __VEC_H_
#define __VEC_H_
#include <iostream>
#include <vector>
namespace xoor{
template<typename T>
class vec{
public:
inline friend vec<T> operator + (const vec<T>&, const vec<T>&);
inline const vec<T>& operator += (const vec<T>&);
private:
std::vector<T> m_index;
}; // Vec.
template<typename T>
vec<T>& operator + (const vec<T>& a, const vec<T>& b){
vec<T> product = a;
product += b;
return product;
} // Addition.
template<typename T>
const vec<T>& vec<T>::operator += (const vec<T>& v){
for (unsigned short i =0; i < m_index.size(); ++i){
if (i >= v.size())
break;
m_index[i] += v.getIndex()[i];
}
return * this;
} // Addition Compound.
} // xoor
#endif // __VEC_H_
Lưu ý rằng tôi cũng đã [] quá tải, vì vậy tôi chỉ truy cập vào các phần của m_index với nó. getIndex() chỉ trả về m_index. Và kích thước() trả về m_index.size()
/** main.cpp **/
#include <iostream>
#include "vec.h"
void testHook();
int main(){
testHook();
system("PAUSE");
return 0;
}
void testHook(){
using namespace xoor;
vec<double> vA(3); // passing 3 for 3 elements
vec<double> vB(3);
// v + v
std::cout << "\n\tA + B = ";
vec<double> vAB(3);
vAB = vA + vB; // PRODUCES THE LNK2019
vAB.print(std::cout); // Outputs the vec class to the console.
}
Thông báo lỗi:
Error 1 error LNK2019: unresolved external symbol "class xoor::vec<double> __cdecl xoor::operator+(class xoor::vec<double> const &,class xoor::vec<double> const &)" ([email protected]@[email protected]@[email protected]@[email protected]) referenced in function "void __cdecl testHook(void)" ([email protected]@YAXXZ) main.obj
Cập nhật:
Sau đây tại là trực tiếp trên các định nghĩa lớp. Tôi tiếp tục nhận được cùng một lỗi trình liên kết, như được mô tả ở trên.
template<typename T>
class vec;
template<typename T>
vec<T> operator + (const vec<T>&, const vec<T>&);
Cập nhật 2: Giải pháp.
Bản cập nhật ở trên không chính xác. sbi của giải pháp đã làm việc, tôi chỉ thất bại để mẫu các nhà điều hành như sau.
template<typename T>
vec<T> operator +<T> (const vec<T>&, const vec<T>&);
sbi và david đang thảo luận tại sao tôi sử dụng bạn bè ngay từ đầu. Ban đầu tôi đã sử dụng chúng, bởi vì bạn không thể vượt qua hai tham số cho một toán tử nhị phân quá tải như +, và ngay sau khi bạn bè tìm kiếm như là giải pháp. Khi nó quay ra, bạn vẫn có thể sử dụng toán tử nhị phân khá dễ dàng với một tham số duy nhất. Đây là giải pháp cuối cùng.
// ...
template<typename T>
class vec{
public:
const vec<T> operator + (const vec<T>&, const vec<T>&)const;
// ...
}; // Vec.
template<typename T>
const vec<T> vec<T>::operator + (const vec<T>& v)const{
matrix<T> product = *this;
vec(product += v);
} // Addition.
Ngoài ra, đối với bất kỳ ai đọc điều này, đáng để kiểm tra ghi chú của sbi ở cuối câu trả lời. Có một số điều tôi đã làm đó là thừa.
Cảm ơn sự giúp đỡ của mọi người. Chúc mừng mã hóa.
Nếu đây là bài tập về nhà (và có vẻ nghi ngờ như vậy), bạn nên thêm thẻ 'bài tập về nhà'. Nhiều người trong chúng ta trả lời các câu hỏi về bài tập ở nhà khác nhau, để bạn học nhiều nhất có thể từ điều này (trong khi các câu hỏi khác thường được hỏi để bất cứ ai hỏi có thể tiếp tục làm những gì họ làm càng nhanh càng tốt). – sbi