C++ “错误”;此声明没有存储类或类型说明符;
我正在用VisualStudio编写我的第一个应用程序,我不明白它显示了一个错误 有两个文件,会话和登录。登录使用会话的set和get函数。如下面所示,Login调用“setCurrentLang”,这是Visual Studio在Login.cpp上显示的消息:“此声明没有存储类或类型说明符”。如果我编译,这就是错误,那么: “错误26错误C2365:'setCurrentLang':重新定义;以前的定义是'function'(..)\GUI\Login.cpp” 这是Session.cpp文件:C++ “错误”;此声明没有存储类或类型说明符;,c++,c,visual-studio-2013,C++,C,Visual Studio 2013,我正在用VisualStudio编写我的第一个应用程序,我不明白它显示了一个错误 有两个文件,会话和登录。登录使用会话的set和get函数。如下面所示,Login调用“setCurrentLang”,这是Visual Studio在Login.cpp上显示的消息:“此声明没有存储类或类型说明符”。如果我编译,这就是错误,那么: “错误26错误C2365:'setCurrentLang':重新定义;以前的定义是'function'(..)\GUI\Login.cpp” 这是Session.cpp文
#include "Session.h"
const char* CURRENT_LANG;
void setCurrentLang( char* lang){
CURRENT_LANG = strdup(lang);
}
const char* getCurrentLang(){
return CURRENT_LANG;
}
会议h
#ifndef __SESSION_H__
#define __SESSION_H__
#include <cstring>
#include <stdio.h>
void setCurrentLang( char* lang);
const char* getCurrentLang();
#endif
非常感谢你的帮助 您可以在任何上下文之外调用该方法。这是不可能的。如果要在开始时设置语言,可以在
main
的开头调用它,或者使用在构造函数中调用它的伪静态类:
static class LanguageSetter
{
public:
LanguageSetter()
{
setCurrentLang("English");
}
} dummy;
或者只需在当前语言的定义中设置默认值:
// std::string because this is C++, not C
std::string CURRENT_LANG = "English";
您可以在任何上下文之外调用该方法。这是不可能的。如果要在开始时设置语言,可以在
main
的开头调用它,或者使用在构造函数中调用它的伪静态类:
static class LanguageSetter
{
public:
LanguageSetter()
{
setCurrentLang("English");
}
} dummy;
或者只需在当前语言的定义中设置默认值:
// std::string because this is C++, not C
std::string CURRENT_LANG = "English";
请编辑您的问题,以包含完整且未编辑的错误输出。还要指出错误的来源。选择一种语言。谢谢@JoachimPileborg,我编辑了这篇文章。@WhozCraig,我不明白你的意思。我不能在C++上使用C吗?你可以在C++中使用C,但是C++会让你自己开枪,当你把它与C混合时,它甚至会给你一个带安全的猎枪。因此,很难调试问题、内存泄漏和崩溃,因为您需要跟踪内存(因为C)和实例生存期(因为C++ +RAII),并确保这两个同步非常完美。请编辑您的问题以包括完整的未编辑错误输出。还要指出错误的来源。选择一种语言。谢谢@JoachimPileborg,我编辑了这篇文章。@WhozCraig,我不明白你的意思。我不能在C++上使用C吗?你可以在C++中使用C,但是C++会让你自己开枪,当你把它与C混合时,它甚至会给你一个带安全的猎枪。因此,很难调试问题,内存泄漏和崩溃,因为你需要跟踪你的内存(因为C)和实例生存期(因为C++ +RAII),并确保这两个同步完美。把功能放在一边,为什么我不能调用登录上的函数?我如何调用此函数?您不能调用它,因为它没有上下文。要解决这个问题,请阅读我的答案。是的,我想我理解你的意思。但是我想在开始时设置一种语言,并使用一种方法从任何文件管理会话。例如,为当前用户设置新名称或新电子邮件。这是最好的方法吗?我怎么能调用“dummy”的函数呢?感谢您的耐心。构造函数将自动调用。请注意,它未定义不同文件的初始化顺序,因此在多个文件中使用时可能无法正常工作。有两种方法可以处理这个问题,一种是,另一种(更可取的是)根本不这样做,而是在使用所有资源时逐步初始化它们,最好的方法是在定义中指定
CURRENT_LANG
的默认值,并在代码为C++时使用std::string
:std::string CURRENT_LANG=“English”代码>将功能放在一边,为什么我不能在Login.cpp时调用该函数??我如何调用此函数?您不能调用它,因为它没有上下文。要解决这个问题,请阅读我的答案。是的,我想我理解你的意思。但是我想在开始时设置一种语言,并使用一种方法从任何文件管理会话。例如,为当前用户设置新名称或新电子邮件。这是最好的方法吗?我怎么能调用“dummy”的函数呢?感谢您的耐心。构造函数将自动调用。请注意,它未定义不同文件的初始化顺序,因此在多个文件中使用时可能无法正常工作。有两种方法可以处理这个问题,一种是,另一种(更可取的是)根本不这样做,而是在使用所有资源时逐步初始化它们,最好的方法是在定义中指定CURRENT_LANG
的默认值,并在代码为C++时使用std::string
:std::string CURRENT_LANG=“English”代码>