Làm thế nào để định nghĩa một hàm friend trong source file?

Em có một project gồm 3 file là: header.h, source.cpp, main.cpp như sau:

//header.h

#ifndef header_h
#define header_h

class Test {
		friend void B (int n);
};

#endif


//source.cpp

#include "header.h"
#include <iostream>

void B (int n) {
	std :: cout << n;
}


//main.cpp

#include <iostream>
#include "header.h"

using namespace std;

int main () {
	B(3);
	return 0;
}

B là một hàm friend, nó được định nghĩa ở file source.cpp. Vấn đề em gặp phải ở đây là lúc gọi hàm B ở main.cpp thì nó bị lỗi: 'B' was not declared in this scope.
Vậy làm cách nào để sửa được lỗi này ạ ?

Bạn mới chỉ bảo B() là friend của Test chứ chưa có khai báo cho B(). :slight_smile:

Thêm dòng :point_down: vô file header.h là ok.

void B(int n);
2 Likes

Ồ, hoá ra, cái friend có nghĩa ý là như vây.
Nhưng mà sao, có một số hàm chỉ cần khai báo friend thôi, không cần thêm một cái khai báo nữa, mà nó vẫn chạy vậy bạn ?

Vì nó đã được khai báo sẵn (ở đâu đó) rồi. :slight_smile:

1 Like

Mình khai báo có một lần thôi trong source file thôi, mà nó vẫn chạy được.

Vậy là khai báo rồi còn gì. :slight_smile:


Còn cái friend trong class không phải khai báo, mà hiểu đơn giản là bảo với class đó rằng nếu có một hàm nào được khai báo kiểu như vầy thì hàm đó sẽ được sử dụng private member của nó!!!

3 Likes

Oki. Cảm ơn vì đã chia sẻ kiến thức của bạn cho mình. :laughing:
(Nhận tiện bạn và mình cùng thích xem anime nhỉ)

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