0

我正在构建一个使用 ICloneable 的学校项目。这是一个非常直接的项目,但我似乎无法通过这个错误:

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in   function ___tmainCRTStartup
1>C:\Users\Ed\Documents\Visual Studio 2012\School_Projects\Cpp   Programs\CppInterfaceProgramming\Debug\CppInterfaceProgramming.exe : fatal error LNK1120: 1   unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 

该项目使用 VS2012 设置为 CLR 控制台应用程序。我确定我选择了正确的应用程序。

这是给我问题的代码:

/*
TestCloning class provides for testing of Circle and Square classes

*/
#include "stdafx.h"
#include "Square.h"
#include "Circle.h"

using namespace System;

ref class TestCloning
{
private: static ConsoleKeyInfo^ cki;
     static Object^ Copy (ICloneable^ o)
     {
         Object^ newObject = o->Clone();
         return newObject;
     }

     static void main()
     {
         while (true)
         {
             copyOrExit();
             if (cki->ToString() == "S")
             {
                 displayAndCopySquare();
             }
             else if (cki->ToString() == "C")
             {
                 displayAndCopyCircle();
             }
             else if (cki->Key == ConsoleKey::Escape)
             {
                 Environment::Exit(0);
             }
         }// while
     } // main

     // provide prompt for user to copy object or exit
     static void copyOrExit()
     {
         Console::WriteLine(L"Press the Escape key to exit, S to display and copy a Square object, " +
             "or C to display and copy a Circle object. ");
         cki = Console::ReadKey(true);
         Console::WriteLine(L"\n");
     } // end copyOrExit method

     // method to display and copy features of a square based on user input
     static void displayAndCopySquare()
     {
         String^ userInput;
         bool isNum;
         double sideLength = 0;

         while (true)
         {
             Console::WriteLine(L"Please enter a number representing the length of one side of a squareto "+
                 "examine and copy...");
             userInput = Console::ReadLine();
             isNum = double::TryParse(userInput, sideLength);

             if (isNum)
             {
                 sideLength = double::Parse(userInput);
                 break;
             }
             else
             {
                 Console::WriteLine(L"The value you entered is not a qualified value.  Please try again...");
                 Console::WriteLine("");
             }
         }// while (true)

         // create Square object and display
         Square^ mySquare = gcnew Square(sideLength);

         Console::WriteLine("The length of one side of this square is " + mySquare->Side);
         Console::WriteLine("The perimeter of this square is " + mySquare->Perimeter);
         Console::WriteLine("The area of this square is " + mySquare->Perimeter);

         // clone square to new object and display
         ICloneable^ clonedSquare = mySquare;
         Square^ newSquare = (Square^)Copy(clonedSquare);
         Console::WriteLine(L"The length of one side of the square clone is " + newSquare->Side);
         Console::WriteLine(L"The perimeter of the square clone is " + newSquare->Perimeter);
         Console::WriteLine(L"The area of the square clone is " + newSquare->Area);
         Console::WriteLine(L"\n");

     } // end of displayAndCopySquare method

     // method to display and copy features of a circle based on user input
     static void displayAndCopyCircle()
     {
         String^ userInput;
         double radius = 0;
         bool isNum;

         while (true)
         {
             Console::WriteLine(L"Please enter an integer representing the radius of a circle to examine and copy");
             userInput = Console::ReadLine();
             isNum = double::TryParse(userInput, radius);
             if (isNum)
             {
                 radius = double::Parse(userInput);
                 break;
             }
             else
             {
                 Console::WriteLine(L"The value you entered is not a qualified value.  Please try again...");
                 Console::WriteLine(L"\n");
             }
         } // while loop

         // create circle object and display
         Circle^ myCircle = gcnew Circle(radius);
         Console::WriteLine(L"The radius of this circle is " + myCircle->Radius);
         Console::WriteLine(L"The circumference of this circle is " + myCircle->Circumference);
         Console::WriteLine(L"The area of this circle is " + myCircle->Area);

         // clone circle to new object and display
         ICloneable^ clonedCircle = myCircle;
         Circle^ newCircle = (Circle^)Copy(clonedCircle);
         Console::WriteLine(L"The radius of this circle clone is " + newCircle->Radius);
         Console::WriteLine(L"The circumference of this clircle clone is " + newCircle->Circumference);
         Console::WriteLine(L"The area of this circle clone is " + newCircle->Circumference);
         Console::WriteLine(L"\n");
     } // end displayAndCopyCircle
};
4

1 回答 1

1

您将需要一个 main() 函数,以便链接器可以找到它。

int main(array<System::String ^> ^args)
{ 
    TestCloning::main();
    return 0;
}
于 2012-11-12T18:17:38.977 回答