已解決 !Dll封裝 類中 友元函式報錯 不能夠 呼叫。無法解析的外部符號???
阿新 • • 發佈:2021-01-28
今天在完成老師佈置給的作業時,進行測試時遇到了這個錯誤。在此記錄一下,也為了幫助同樣遇到錯誤的同學。
逐一刪除測試程式碼做了測試發現問題出在友元函式。
#include <one.h>
#include<pch.h>
int main() {
int arr[] = { 1,2,3,4,5,6 };
int n = 6;
Array a(arr, n);
++a; //成員函式前置自增
a++; //成員函式後置自增
//--a; //友元函式前置自減
//a--; //友元函式後置自減
a.print();
}
原因 :
- 友元函式不屬於類的成員函式
- 我只對類做了 關鍵字宣告,
- 沒有對友元函式做宣告
- 所以不能夠呼叫。
原始碼.h檔案:
#pragma once
#ifdef DLL2_EXPORTS
#define C_TEST __declspec(dllexport)
#else
#define C_TEST __declspec(dllimport)
#endif
#include <iostream>
using namespace std;
class C_TEST Array { //只對這裡做了關鍵字宣告
private:
int *p;
int n;
public:
Array();
Array(Array & s);
Array(int arr[], int m);
void operator ++() ;
void operator ++(int);
friend void operator--(Array &d);
friend void operator--(Array &d, int);
void print() ;
~Array();
};
修改後:
#pragma once
#ifdef DLL2_EXPORTS
#define C_TEST __declspec(dllexport)
#else
#define C_TEST __declspec(dllimport)
#endif
#include <iostream>
using namespace std;
class C_TEST Array {
private:
int *p;
int n;
public:
Array();
Array(Array &s);
Array(int arr[], int m);
void operator ++() ;
void operator ++(int);
friend void C_TEST operator--(Array &d);//加上了宣告
friend void C_TEST operator--(Array &d, int);//加上了宣告
void print() ;
~Array();
};