C++编译报错:全局作用域声明不能使用该存储类(register关键字冲突)
解决C++编译错误:"a global-scope declaration may not have this storage class"
问题原因
register是C++的关键字,专门用于声明寄存器存储类的变量,不能用作函数名、变量名等自定义标识符。你的代码里把register当作函数名,编译器会误判为用register存储类声明全局函数,而全局函数不允许使用register存储类,因此触发编译错误。
解决方案
把函数名改成任意非关键字的名称,比如registerUser、doRegister,然后同步修改所有涉及该函数的声明、定义和调用位置。
修改后的代码示例
- functions.h
#pragma once #include <iostream> void registerUser(); // 改名
- functions.cpp
#include "functions.h" void registerUser() // 同步改名 { std::cout << "hi\n"; }
- main.cpp
#include "personel.h" #include "functions.h" #include <iostream> #include <string> #include <vector> int main() { while (true) { std::cout << "welcome.\n 1 to register, 2 to login\n"; int rORl = 0; std::cin >> rORl; if (rORl == 1) { registerUser(); // 调用改名后的函数 } else if (rORl == 2) { std::cout << "logged in"; } } }
personel.h文件无需修改,保持原样即可。
内容的提问来源于stack exchange,提问作者Thumper
相关产品推荐
相关产品推荐

