cuốn sách gpt4 ai đã làm

c++ - LNK1120: 1 ký hiệu bên ngoài chưa được giải quyết và LNK2019: ký hiệu bên ngoài chưa được giải quyết

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 10:31:55 29 4
mua khóa gpt4 Nike

Tôi liên tục gặp phải hai lỗi này nhưng dường như tôi không thể tìm ra giải pháp hiệu quả.

LNK1120: 1 lỗi bên ngoài chưa được giải quyết

Lỗi 1 lỗi LNK2019: ký hiệu bên ngoài chưa được giải quyết "public: __thiscall Vector3D::Vector3D(class Vector3D const &)" (??0Vector3D@@QAE@ABV0@@Z) được tham chiếu trong hàm "public: class Vector3D __thiscall Vertex::GetPosition( void)" (?GetPosition@Vertex@@QAE?AVVector3D@@XZ)

Tôi nghĩ điều này liên quan đến toán tử Ma trận và hàm tạo trong lớp Vector 3d của tôi, mọi trợ giúp sẽ được đánh giá rất cao vì tôi còn rất mới với C++

#ifndef MATRIX4_H
#xác định MATRIX4_H

#include "Vector3D.h"

lớpMatrix4
{
public:
Ma Trận4();
Matrix4(const Matrix4& rhs);
~Ma trận4();

Vector3D Matrix4::operator *(vectơ Vector3D)
{
Vector3D newVector;

newVector.SetVector_X((m[0][0] * vector.GetVector_X()) + (m[0][1] * vector.GetVector_Y()) + (m[0][2] * vector.GetVector_Z() ) + m[0][3]);
newVector.SetVector_Y((m[0][0] * vector.GetVector_X()) + (m[1][1] * vector.GetVector_Y()) + (m[1][2] * vector.GetVector_Z() ) + m[1][3]);
newVector.SetVector_Z((m[0][0] * vector.GetVector_X()) + (m[2][1] * vector.GetVector_Y()) + (m[2][2] * vector.GetVector_Z() ) + m[2][3]);
trả về Vector3D(newVector.GetVector_X(),newVector.GetVector_Y(),newVector.GetVector_Z());

}

void SetMatrix(ma trận float[4][4])
{
memcpy(m,ma trận,sizeof(ma trận));
}

private:
phao m[4][4];
};
#endif

Tệp Vector3D.h

#ifndef VECTOR3D_H
#xác định VECTOR3D_H

lớp Vector3D
{
public:
Vector3D();
Vector3D(const Vector3D& rhs);
~Vector3D();

Vector3D(phao VectorX, thả VectorY, thả VectorZ)
{
x=VectorX;
y=VectơY;
z=VectorZ;
}

void SetVector3D(vector float_X, vector float_Y, vector float_Z)
{
x = vectơ_X;
y = vectơ_Y;
z = vectơ_Z;
}

void SetVector_X(vectơ nổi_X)
{
x=vector_X;
}

void SetVector_Y(vectơ nổi_Y)
{
y=vectơ_Y;
}

void SetVector_Z(vectơ nổi_Z)
{
z=vector_Z;
}

thả nổi GetVector_X()
{
trả lại x;
}

thả nổi GetVector_Y()
{
trả lại y;
}

thả nổi GetVector_Z()
{
trả về z;
}

Vector3D GetVector()
{
trả về Vector3D(x,y,z);
}

private:
phao x;
thả nổi y;
thả nổi z;

};
#endif

câu trả lời hay nhất

Nó báo là trình liên kết không thể tìm thấy Vector3D(const Vector3D& rhs); sự thực hiện. Hàm tạo này được khai báo trong lớp vectơ của bạn nhưng không được xác định.

.cpp Có triển khai hàm tạo trong tệp không và trình biên dịch của bạn có biết nó không?

Đây là cách quá trình biên dịch C/C++ hoạt động: Đầu tiên, bạn có một số cái gọi là "đơn vị biên dịch" - thông thường, mỗi đơn vị .cpp Các tập tin đều là các đơn vị biên dịch như vậy. Chương trình của bạn bao gồm tất cả các đơn vị độc lập này được liên kết với nhau (quá trình "liên kết", diễn ra sau khi biên dịch). Mọi hàm được gọi ở đâu đó phải được xác định trong một số đơn vị biên dịchĐúng một lần, trừ khi nó được định nghĩa nội tuyến (giống như các phương thức khác trong lớp của bạn). Nếu một phương thức được khai báo nhưng không được xác định, trình biên dịch sẽ không nhắc - chỉ có trình liên kết mới thực hiện. Hãy tưởng tượng một đơn vị biên dịch có các "ổ cắm" và "đầu nối" phù hợp với các "ổ cắm" tương ứng trong các đơn vị khác. Quá trình biên dịch chỉ tạo ra các đơn vị này, giả sử một hình dạng "ổ cắm" cụ thể (do khai báo đưa ra), trong khi trình liên kết thực sự cố gắng kết nối từng "ổ cắm" với "đầu nối" của nó. Như vậy các bạn thấy quá trình biên dịch có thể thành công nhưng việc liên kết thì không.

Lỗi trình liên kết có thể khó khắc phục, đặc biệt nếu bạn chưa có nhiều kinh nghiệm. Nguyên nhân của chúng có thể có nhiều:

  • Thiếu triển khai/định nghĩa
  • Định nghĩa tồn tại nhưng bằng cách nào đó không biên dịch được (vì tệp không được chuyển tới trình biên dịch, v.v.)
  • Các phiên bản khác nhau của thư viện, v.v.

Còn nhiều nữa...

biên tập:Bên cạnh đó, bạn nên truyền vector bằng tham chiếu const và tạo newVector bằng cách gọi hàm tạo của nó thay vì tạo đối tượng được xây dựng mặc định rồi gán nó. không cần tuyên bố trở lại công trình cuối cùng trong . Mã cải tiến:

Vector3D Matrix4::operator *(const Vector3D& vector)
{
trả về 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]
);
}

Về c++ - LNK1120: 1 các phần bên ngoài chưa được giải quyết và LNK2019: biểu tượng bên ngoài chưa được giải quyết, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/14289170/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress