Bị lỗi khó hiểu khi code c++

Xin chào mọi người, em mới học c++ và đang bị mấy lỗi không biết tại sao ạ

Em có ba file là Class.h, Functions.hFunctions.cpp

  • File Class.h
#pragma once
#include "Functions.h"

void PrintFromOutSide(int a);

class Test
{
private:
	int a;
public:
	Test()
	{
		a = 1;
	}
	void SetA(int num)
	{
		a = num;
	}
	int getA()
	{
		return a;
	}
       
    // Để in giá trị hàm này sẽ gọi hàm PrintFromOutSide() từ file Func.h
	void PrintSome()
	{
		PrintFromOutSide(getA());
	}
};
  • File Func.h
#pragma once

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

// Hàm in giá trị khi gọi hàm PrintSome() trong class Test
void PrintFromOutSide(int a);
// Hàm để in giá trị của biến a trong class Test
void PrintTheTestClass(Test test);

  • File Func.cpp
#include "Functions.h"

void PrintFromOutSide(int a)
{
	std::cout << a;
}

void PrintTheTestClass(Test test)
{
	std::cout << test.getA();
}

Em dùng Visual Studio 2019, và bị những lỗi này ạ
Screenshot_1
Không hiểu bị thiếu các dấu ở đâu và chưa khai báo

  • Mong mọi người có thể sửa những lỗi giúp mình, mình cảm ơn
    *Note: Do không biết đặt title topic thế nào nên đặt như vậy, mình cảm ơn vì đã đọc :blush:

Đầu đuôi không nhất quán
:upside_down_face:

3 Likes
  1. Bạn có khai báo 2 lần với:
    void PrintFromOutSide(int a); đã `#include “Functions.h” rồi, còn khai báo làm gì nữa.
  2. Có thể chính chính chỉ thị (directive) #prama once cùng với phụ thuộc vòng tròn (circular dependency) gây ra chuyện này. MSVC++ nó bắt lỗi dữ lắm.

Hoặc 1 lỗi cú pháp trong Functions.h đã gây ra chuyện này.
Dựa vào thông tin của 3 lỗi thì rất có thể bạn dư hoặc thiếu một dấu mở ngoặc tròn.

Mà cách bạn tham chiếu các tập tin (header) với nhau chả hay tẹo nào. Đáng lẽ Class.h phải là Class.cpp vì bên trong chứa phần định nghĩa của lớp Test luôn rồi.

3 Likes

Sorry anh, do viết hơi sai ạ :sweat_smile:

  • Cái hàm void PrintFromOutSide(int a) em bỏ vào trong file Class.h do nếu không bỏ vào thì bị lỗi không biết hàm PrintFromOutSide() nên phải bỏ vào
  • Lỗi chủ yếu ở cái hàm void PrintTheTestClass(Test test) ạ, ba lỗi trên nó báo ở cái hàm đó luôn
  • Tham chiếu vào Class.cpp do em dùng template nên bỏ phần định nghĩa vào file .cpp nó hay bị lỗi, nên em bỏ luôn vào file header.
  • Em muốn hàm PrintFromOutSide có thể gọi một hàm ở ngoài class, còn hàm PrintTheTestClass để in ra giá trị thành viên trong class đó ạ, nhưng không biết có thể làm tốt hơn.

Delete đống này trong Class.h là xong.

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