01/10/2018, 15:52

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;
}
HelloWorld viết 18:09 ngày 01/10/2018

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

Hà Ngô viết 18:01 ngày 01/10/2018

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

HelloWorld viết 17:56 ngày 01/10/2018

Nếu đã nạp chồng rồi thì xem lại prototype và definiton của hàm nạp chồng

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
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

Hà Ngô viết 18:08 ngày 01/10/2018

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 đỡ ạ

Florastamine viết 18:04 ngày 01/10/2018

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ụ

Hà Ngô viết 18:00 ngày 01/10/2018

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

viết 18:07 ngày 01/10/2018

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

Hà Ngô viết 17:58 ngày 01/10/2018

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

viết 18:06 ngày 01/10/2018

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?

Hà Ngô viết 18:09 ngày 01/10/2018

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

viết 17:58 ngày 01/10/2018

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.

Hà Ngô viết 18:08 ngày 01/10/2018

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

Hà Ngô viết 18:02 ngày 01/10/2018

em dùng codeblocks ạ

viết 18:08 ngày 01/10/2018

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 đó @_@

Hà Ngô viết 18:07 ngày 01/10/2018

Hà Ngô viết 18:08 ngày 01/10/2018

viết 17:58 ngày 01/10/2018

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

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

Hà Ngô viết 18:09 ngày 01/10/2018

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

viết 18:07 ngày 01/10/2018

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

Bài liên quan
0