Khi để code định nghĩa hàm trong file header thì chạy binh thường nhưng khi tách file định nghĩa hàm ra khỏi header thì lỗi?
vấn đề 1
khi e để code định nghĩa hàm trong file header thì chạy binh thường
nhưng khi tách file định nghĩa hàm ra khỏi header thì lỗi
e có 1 file header , 1 file code của 1 hàm con, 1 file main như sau
3 file này đã để chung 1 thư mục
file main.c
#include <stdio.h>
#include <conio.h>
#include "mylibrary.h"
main ()
{
int n;
do
{
printf ("Nhap vao 1 so nguyen duong de kiem tra so nguyen to
");
scanf ("%d",&n);
}
while (n <=0);
printf("Cac so nguyen to < %d la
", n);
vListNT (n);
getch();
return 0;
}
file header mylibrary.h
int iCheckNT (int n);
void vListNT (int n);
file code hàm
#include "mylibrary.h"
#include <math.h>
int iCheckNT (int n)
{
int i;
if ( n <2) return 0;
for (i = 2; i <=sqrt(n); i++)
if ( n % i ==0) return 0;
return 1;
}
void vListNT (int n)
{
int i;
if (n == 2 || n==1 ) printf (" Khong co so nguyen to nao < %d", n);
else for (i = 2; i < n; i++) if ( iCheckNT (i) == 1) printf ("%d ",i);
}
biến dịch trên dev c++ thì gặp lỗi (.text+0x52): undefined reference to `vListNT’
vấn đề 2: tương tự lần này e dùng include guard để tránh thư viện được biên địch 2 lần
e cũng có 3 file
file hàm main.c như ở vấn đề 1
file header mylibrary.h
#ifndef HEADER_FILE
#define HEADER_FILE
#include <math.h>
int iCheckNT (int );
void vListNT (int );
#endif
file code hàm
#include "mylibrary.h"
int iCheckNT (int n)
{
int i;
if ( n <2) return 0;
for (i = 2; i <=sqrt(n); i++)
if ( n % i ==0) return 0;
return 1;
}
void vListNT (int n)
{
int i;
if (n == 2 || n==1 ) printf (" Khong co so nguyen to nao < %d", n);
else for (i = 2; i < n; i++) if ( iCheckNT (i) == 1) printf ("%d ",i);
}
thì cũng k chạy được lỗi như ở vấn đề 1
nếu e bỏ định nghĩa hàm vào file header luôn thì chả sao, nhưng e muốn tách ra 1 file .c riêng thì lại lỗi? lỗi ở đâu ạ, tại sao hàm vListNT bị báo là k xác định
Theo kinh nghiệm:
Bởi vì compiler ko có link các file lại.
Bạn code trên 1 file riêng lẻ và ko tạo project?
Như khi compile 1 file riêng lẻ, compiler thực hiện lệnh sau:
Nếu như vậy thì chỉ cần tạo 1 project, add file header và source vào. Sau đó là vô tư include.
Thì IDE sẽ lôi sạch cái file nào dính liếu vô và compile theo lệnh
Đọc cuốn head first C có nói về vấn đề này
xincamon, đúng là chưa tạo project
head first c, tiếng anh nên đọc rất mất thời gian, mình hơi kém tiếng anh, mình chưa kịp đọc hết thì phải học môn khác ,nên đang dừng quyển đó lại, mình chưa đọc thấy phần đó
như vậy sẽ chạy được thửu xem nhé
thế nếu trong file đó có nhiều hàm thì mỗi hàm đều phải thêm mylibrary:: phía trước hả bạn?
không chạy được bạn à?
khi bạn tạo 1 class bạn viết như sau trong file .h đúng không
trong file .cpp có tên cùng với file .h bạn sẽ khai báo như sau:
như vậy nó sẽ chạy, còn ở trên mình tưởng bạn đặt tên class trừng tên file .h nên mình mới viết vậy thôi
.
bạn có thể gu gồ video hướng dẫn giải bài tập hướng đối tượng của anh việt nam sơn nguyễn để biết thêm nhiều thứ nữa chúc bạn học giỏi
cho e hỏi cái đoạn này của bác có ý đồ gì thế?
kiểm tra số nguyên tố bạn à