我正在编写一个程序,其中包含在Visual Studio 2005中使用C ++ / CLI的辅助表单。到目前为止,由于一对没有多大意义的重新定义错误,我没有取得多大进展。
Mode.h(12) : error C2374: 'NameManipulator::check' : redefinition; multiple initialization
Mode.h(12) : see declaration of 'NameManipulator::check'
Mode.h(22) : error C2011: 'NameManipulator::Mode' : 'class' type redefinition
Mode.h(22) : see declaration of 'NameManipulator::Mode'
我只在一个命名空间中声明了这一次。其中一个甚至是由编译器预先生成的。除了从头开始,我还能做些什么来解决这个问题吗?任何帮助将非常感激。 (以下代码)
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace NameManipulator {
int check = 4;
/// <summary>
/// Summary for Mode
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public ref class Mode : public System::Windows::Forms::Form
{
public:
Mode(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Mode()
{
if (components)
{
delete components;
}
}
public: System::Windows::Forms::RadioButton^ rdoAllCaps;
public: System::Windows::Forms::RadioButton^ rdoAllLow;
public: System::Windows::Forms::RadioButton^ rdoReverse;
public: System::Windows::Forms::RadioButton^ rdoNormal;
private: System::Windows::Forms::Button^ btnOK;
protected:
private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->rdoAllCaps = (gcnew System::Windows::Forms::RadioButton());
this->rdoAllLow = (gcnew System::Windows::Forms::RadioButton());
this->rdoReverse = (gcnew System::Windows::Forms::RadioButton());
this->rdoNormal = (gcnew System::Windows::Forms::RadioButton());
this->btnOK = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
//
// rdoAllCaps
//
this->rdoAllCaps->AutoSize = true;
this->rdoAllCaps->Location = System::Drawing::Point(12, 12);
this->rdoAllCaps->Name = L"rdoAllCaps";
this->rdoAllCaps->Size = System::Drawing::Size(75, 17);
this->rdoAllCaps->TabIndex = 0;
this->rdoAllCaps->Text = L"ALL CAPS";
this->rdoAllCaps->UseVisualStyleBackColor = true;
//
// rdoAllLow
//
this->rdoAllLow->AutoSize = true;
this->rdoAllLow->Location = System::Drawing::Point(12, 35);
this->rdoAllLow->Name = L"rdoAllLow";
this->rdoAllLow->Size = System::Drawing::Size(63, 17);
this->rdoAllLow->TabIndex = 1;
this->rdoAllLow->Text = L"all lower";
this->rdoAllLow->UseVisualStyleBackColor = true;
this->rdoAllLow->CheckedChanged += gcnew System::EventHandler(this, &Mode::rdoAllLow_CheckedChanged);
//
// rdoReverse
//
this->rdoReverse->AutoSize = true;
this->rdoReverse->Location = System::Drawing::Point(12, 58);
this->rdoReverse->Name = L"rdoReverse";
this->rdoReverse->Size = System::Drawing::Size(71, 17);
this->rdoReverse->TabIndex = 2;
this->rdoReverse->Text = L"rEVERSE";
this->rdoReverse->UseVisualStyleBackColor = true;
this->rdoReverse->CheckedChanged += gcnew System::EventHandler(this, &Mode::rdoReverse_CheckedChanged);
//
// rdoNormal
//
this->rdoNormal->AutoSize = true;
this->rdoNormal->Checked = true;
this->rdoNormal->Location = System::Drawing::Point(12, 81);
this->rdoNormal->Name = L"rdoNormal";
this->rdoNormal->Size = System::Drawing::Size(73, 17);
this->rdoNormal->TabIndex = 3;
this->rdoNormal->TabStop = true;
this->rdoNormal->Text = L"rdoNormal";
this->rdoNormal->UseVisualStyleBackColor = true;
//
// btnOK
//
this->btnOK->DialogResult = System::Windows::Forms::DialogResult::OK;
this->btnOK->Location = System::Drawing::Point(32, 106);
this->btnOK->Name = L"btnOK";
this->btnOK->Size = System::Drawing::Size(33, 23);
this->btnOK->TabIndex = 4;
this->btnOK->Text = L"OK";
this->btnOK->UseVisualStyleBackColor = true;
//
// Mode
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(99, 138);
this->ControlBox = false;
this->Controls->Add(this->btnOK);
this->Controls->Add(this->rdoNormal);
this->Controls->Add(this->rdoReverse);
this->Controls->Add(this->rdoAllLow);
this->Controls->Add(this->rdoAllCaps);
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
this->Name = L"Mode";
this->StartPosition = System::Windows::Forms::FormStartPosition::CenterParent;
this->Text = L"Mode";
this->Load += gcnew System::EventHandler(this, &Mode::Mode_Load);
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void rdoReverse_CheckedChanged(System::Object^ sender, System::EventArgs^ e){
if (rdoReverse->Checked == true)
check = 3;
}
private: System::Void Mode_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void rdoAllLow_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
}
};
}
答案 0 :(得分:2)
您的错误是您在头文件中定义 check
变量:
namespace NameManipulator {
int check = 4;
// Error in the line above
将其更改为声明,如下所示:
namespace NameManipulator {
extern int check;
并在源文件中添加定义:
int NameManipulator::check = 4;
答案 1 :(得分:0)
在使用多个模块(.h和.cpp文件)时,重定义错误可能会引起诸如打字错误之类的简单问题。我犯的错误是:
#ifndef NAMESPACE_FILENAME_H
#define NAMESPACE_FILEMANE_H
#include <iostream>
#include "helperFile.h"
/* you code and stuff here */
#endif
我们使用 #ifndef 和 #endif ,以便编译器可以忽略对不同文件的多个声明,并且仅具有1个定义实例。现在,如果您回到我声明的第二行。我做了错别字fileMane而不是文件名。除此以外,编译器会通过这么多错误。所以,请注意拼写错误!
PS:课程费用:用细齿梳梳完我的代码需要5个小时。
答案 2 :(得分:0)