Lỗi multiple definition of khi sử dụng DevC++

Mọi người ơi cho em hỏi, em có 1 file .txt, 1 file .h, 1 file .cpp để định nghĩa hàm và 1 fiel main.cpp.

—Đây là file .cpp

#include <fstream>
#include "46.h"
#include <cmath>
void getInput(int* arr, size_t n, std::ifstream &ifs) {
	for (size_t i = 0; i < n; i++)
	{
		ifs >> arr[i];
	}
}

bool checkNT(int n) {
	if (n < 2) {
		return false;
	}

	for (size_t i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0) {
			return false;
		}
	}
	return true;
}

bool checkDivK(int n, int k) {
	return n % k == 0;
}

float getMidValue(int sum, int n) {
	if (n != 0) {
		return 1.0f * sum / n;
	}
	return 0;
}

–Đây là file .h

#pragma once
void getInput(int*, size_t, std::ifstream&);
bool checkNT(int);
bool checkDivK(int, int);
float getMidValue(int, int);

Nhưng khi em chạy chương trình thì cả 4 hàm trong file .cpp đều báo lỗi là multiple definition of + tên hàm. Cho em hỏi cách nguyên nhân và cách giải quyết

em thêm cái screenshot lỗi của DevC++ xem :V

mà bỏ DevC++ đi install VS Community 2022 có 30 phút là xong :V

2 Likes

máy em cùi, chỉ dùng được dev thôi anh

Trong main.cpp chắc lại include 46.cpp chứ gì. 46.h mới đúng

Trong code có đoạn

#pragma once

để tránh lỗi multiple definition. nhưng k phải IDE nào nó cũng dc config để compile đoạn đó.

3 Likes

trong main em để là include 46.h anh.Thế Dev C++ k dùng dc #pragma once ạ?

chắc là lỗi makefile gì đấy :V DevC++ nó xài makefile để build, có khi makefile nó generate ra có vấn đề :V e copy nội dung của cái makefile ra xem thế nào :V


vậy down CodeBlocks về xài, có lẽ ít lỗi hơn :V

em rảnh check lại cái hướng dẫn này xem còn xài được ko =]] Hướng dẫn cài đặt MSYS2 MinGW và cấu hình debugger cho Codeblock

4 Likes
  1. pragma once không phải cái nào cũng hỗ trợ.
  2. Tham số của hàm getInput trong file h không khớp tham số trong hàm của file.cpp.
    size_t (unsigned int) khác int.
2 Likes

nó cùng là size_t mà anh

Cùng đâu mà cùng ?

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