Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Lỗi [Linker error] undefined reference to - Không liên kết được thư viện riêng trong Dev-Cpp

  1. #1
    Ngày gia nhập
    02 2012
    Bài viết
    4

    Mặc định Lỗi [Linker error] undefined reference to - Không liên kết được thư viện riêng trong Dev-Cpp

    Mình mới học OOP nên mong mọi người chỉ giáo giúp mình bài này:
    Đề bài:
    Xây dựng lớp Fraction (phân số) gồm 2 data member lưu tử số và mẫu số. Lớp Fraction còn cung cấp một số member function: getFraction() – cho phép nhập một phân số, displayFraction() – hiển thị phân số theo định dạng a/b, add() – cộng hai phân số, mul() – nhân hai phân số.
    Mình đã tạo file Fraction.h như sau:
    Code:
    #ifndef FRACTION_H_
    #define FRACTION_H_
    
    class Fraction {
    	private:
                 int     tu, mau;
         public:
                 void    getFraction(int, int);
                 void    displayFraction();
                 Fraction    add(Fraction);
                 Fraction    mul(Fraction);
    };
    
    #endif
    file Fraction.cpp
    Code:
    #include "Fraction.h"
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    void Fraction::getFraction(int a, int b)
    {
         tu = a;
         mau = b;
    }
    // Hien thi phan so dang a/b
    void Fraction::displayFraction()
    {
         if (mau>0)                 cout << tu << "/" << mau;
         else                       cout << -tu << "/" << -mau;
    }
    // Cong 2 phan so, nap gia tri vao phan so 2
    Fraction Fraction::add(Fraction p)
    {
             Fraction sum;
             sum.tu = tu*p.mau;
             sum.mau = mau*p.mau;
             return sum;
    }
    // Nhan 2 phan so
    Fraction Fraction::mul(Fraction p)
    {
    	Fraction area;
    	area.tu = tu*p.tu;
    	area.mau = mau*p.mau;
    	return area;
    }
    và file main.cpp
    Code:
    #include <iostream>
    #include <iomanip>
    #include "Fraction.h"
    using namespace std;
    
    void input(Fraction);
    
    int main()
    {
      Fraction p1, p2;
      input(p1);
      input(p2);
      Fraction sum, area;
      // Tong
      sum = p1.add(p2);
      cout << endl << "Tong 2 phan so = ";
      sum.displayFraction();
      // Tich
      area = p1.mul(p2);
      cout << endl << "Tich 2 phan so = ";    area.displayFraction();
      system("PAUSE");	
      return 0;
    }
    
    void input(Fraction p)
    {
         int x, y;
         do{
               cout << "Nhap tu so va mau so ";   cin >> x >> y;
               if (y==0)   cout << "Ban da nhap sai, mau so phai khac 0: ";
               else  p.getFraction(x, y);
         } while (y==0);
    }
    Nhưng khi compile thì Dev-Cpp báo lỗi như sau:
    Code:
      [Linker error] undefined reference to `Fraction::Fraction()'
    và nhiều Linker error cho các hàm còn lại nữa trong class Fraction
    Các bro cho mình hỏi đây là lỗi gì vậy? Có phải do Dev-Cpp không liên kết được thư viện do mình tạo ra không? Mình đã nhờ bạn mình test = compiler khác thì chạy, nhưng vào Dev thì toàn lỗi vầy ah :((
    Mong các bro chỉ giúp mình nha. Thanks
    Đã được chỉnh sửa lần cuối bởi grey lady : 25-02-2012 lúc 09:50 PM.

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    589

    File chương trình của bạn chỉ mới include "Fraction.h", tức là trong file object chỉ chứa khai báo của class Fraction chứ chưa có phần thể hiện của nó. Muốn file kết quả có phần đó thì phải link đến file object của Fraction.cpp, việc này phụ thuộc vào việc bạn cài đặt tùy chọn biên dịch như thế nào.
    Lỗi như trên xuất hiện chứng tỏ trong quá trình link, file object của thư viện không được chỉ ra.

    Nếu không biết cách cấu hình/sử dụng Dev-Cpp IDE thì có thể biên dịch thủ công như sau:
    Code:
    \path\to\g++.exe Fraction.cpp Fracion.h -c
    \path\to\g++.exe main.cpp Fraction.h -c
    \path\to\g++.exe main.o Fraction.o -o main.exe
    Trong đó \path\to\g++.exe là đường dẫn đến file thực thi g++.exe của Dev Cpp, mò một lúc trong thư mục program của Dev Cpp là thấy.
    Đã được chỉnh sửa lần cuối bởi boss14420 : 25-02-2012 lúc 09:39 PM.

  3. #3
    Ngày gia nhập
    02 2012
    Bài viết
    4

    chậc không thấy nút Thanks đâu (chắc do mình mem mới), mình biên dịch được rồi, cảm ơn bạn boss nhé
    (viết thêm cho khỏi spam) Mình cũng phát hiện ra 1 lý do là file Fraction.cpp không có hàm main nên báo lỗi. Giải pháp là đem toàn bộ phần main và các hàm liên quan trong main.cpp vào Fraction.cpp. Nhưng như vậy không tách riêng được phần cài đặt lớp và hàm chính.

  4. #4
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    Trích dẫn Nguyên bản được gửi bởi grey lady Xem bài viết
    chậc không thấy nút Thanks đâu (chắc do mình mem mới), mình biên dịch được rồi, cảm ơn bạn boss nhé
    (viết thêm cho khỏi spam) Mình cũng phát hiện ra 1 lý do là file Fraction.cpp không có hàm main nên báo lỗi. Giải pháp là đem toàn bộ phần main và các hàm liên quan trong main.cpp vào Fraction.cpp. Nhưng như vậy không tách riêng được phần cài đặt lớp và hàm chính.
    lí do mà cậu phát hiện là sai rồi
    file Fraction.cpp không cần hàm main đâu bạn.
    và có thể tách riêng được phần cài đặt lớp và hàm chính.

Các đề tài tương tự

  1. Khởi tạo chế độ đồ họa trong c lỗi: Linker Error: Undefined symbol _initgraph()?
    Gửi bởi hyl trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 21
    Bài viết cuối: 20-09-2012, 08:56 AM
  2. Lập trình C++ Lỗi [Linker error] undefined reference to `WinMain@16'
    Gửi bởi tinhyeuhtduy trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 09-04-2012, 12:19 AM
  3. Bài tập C linker error: undefined symbol main in module c0.ASM
    Gửi bởi theblue0310 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 27-05-2011, 08:38 PM
  4. Trả lời: 9
    Bài viết cuối: 05-05-2011, 04:55 PM
  5. Lỗi Linker undefined reference to `_imp___ZN12QApplicationC1ERiPPci'
    Gửi bởi haian trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 16-03-2010, 01:11 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn