Cần xử lý lỗi undefined reference to `operator<<(std::ostream&, __mpz_struct const*) ntn ạ

#include <gmpxx.h 
#include <iostream

using namespace std;

int main()
{
    mpz_class x = 42;

    cout << x;
}

Nạp chồng << cho class mpz_class nếu chưa có. Nếu đã nạp chồng rồi thì xem lại prototype và definiton của hàm nạp chồng
Bạn nên xem lại bài học cũ :3

<< đã được định nghĩa trong gmpxx.h.

Xem prototype có khớp với definiton không nữa. Mà code của bạn thiếu kí tự > ở 2 include đầu là do paste lên đây mới thiếu hay trong code thiếu vậy :grimacing:
Lỗi này là do gọi đến 1 hàm chưa khái báo, định nghĩa hoặc đã khai báo định nghĩa nhưng khai báo và định nghĩa protype không khớp nhau

2 cái > là do copy lên đây thiếu đấy ạ. Còn về phần kia, sáng mai em chụp ảnh rồi anh xem hộ em cái chỗ khai báo trong thư viện gmpxx.h nhé. Em cảm ơn. Rất mong được giúp đỡ ạ

mpz_class chỉ là class trừu tượng, với nó nằm ở library ngoài (GMP) nên << không hiểu. Muốn in mpz_class thì có thể overload <<, hoặc (dễ hơn) là cast sang số nguyên, hoặc mpz_out_str()

#include <gmpxx.h>
#include <iostream>

int main()
{
  mpz_class x(42);
  std::cout << x.get_ui() << std::endl; // Cách 1
  mpz_out_str(stdout, 10, x.get_mpz_t()); // Cách 2 
}

Khi làm việc với GMP thì không nên lôi hàm arithmetic. I/O… của standard library vào, dùng hàm của riêng nó thôi, mpz_out_str() để in thay vì std::cout là một ví dụ

4 Likes

Em cảm ơn rất rất nhiều ạ

lúc link chương trình thiếu -lgmp ~.~

1 Like

Trong ctr khác, em có cả gmp, gmpxx mà vẫn bị lỗi đó

thế em compile bằng lệnh gì? Có thêm flag gì vô ko hay là bấm 1 nút build như chương trình hello world?

1 Like

Em dùng Window mà anh. Trong phần link conpiler đã liên kết với thư viện gmp và gmpxx rồi. Sau đó buil như thường thôi

Windows mà ko compile bằng tay vậy em xài trình biên dịch gì, VS2017 hay là trình dịch MinGW nào đó? Nếu là MinGW thì xem IDE của em nó có in ra command line ko, dò coi lúc nó link nó có link -lgmp -lgmpxx hay ko.

1 Like

khi em thay mpz thành mpf thì cách 2 không chạy được. giúp em với ạ

em dùng codeblocks ạ

vậy em lấy cái screenshot mấy chỗ em thêm thư viện vô đi

anh cũng chưa xài gmpxx bao giờ =)

có thể là thư viện em down về nó ko có bản Debug, thử build ở chế độ Release xem

có phải thêm như vậy ko hay thêm ở đâu đó @_@

1 Like

em thêm cái libgmpxx.a vô nữa

đúng là ko thiếu gmp mà thiếu gmpxx

1 Like

cái kia chứa cả 2 rồi a ạ
khi em chạy ctr nó báo lỗi ở thư viện này

libgmpxx.a khác libgmp.a @_@ 1 cái của C++ 1 cái của C, operator<< với operator>> là của C++, nó báo undefine reference tới mấy operator này tức là em chưa link thư viện gmpxx

vô C:\gmp-6.1.2\libs coi có file libgmpxx.a ko

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?